Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 调用函数模板时,是否可以只指定一些模板参数,并让编译器推断其他参数_C++_Templates_Type Deduction_Function Templates - Fatal编程技术网

C++ 调用函数模板时,是否可以只指定一些模板参数,并让编译器推断其他参数

C++ 调用函数模板时,是否可以只指定一些模板参数,并让编译器推断其他参数,c++,templates,type-deduction,function-templates,C++,Templates,Type Deduction,Function Templates,考虑以下函数模板: template <typename T1, typename T2> void foo(T1 a, T2 b){// Do something.} 模板 void foo(T1 a,t2b){//做点什么。} 现在假设我希望T1是int,但是T2是由编译器根据b的类型推导出来的。类似于foo(1,b)。可能吗 谢谢 是的 foo<int>(1, b); 对! 昆廷的回答是最方便的 但是有其他的方法来解决这个问题,很明显,要想解决它。因为强制特定

考虑以下函数模板:

template <typename T1, typename T2>
void foo(T1 a, T2 b){// Do something.}
模板
void foo(T1 a,t2b){//做点什么。}
现在假设我希望
T1
int
,但是
T2
是由编译器根据
b
的类型推导出来的。类似于
foo(1,b)
。可能吗

谢谢

是的

foo<int>(1, b);
对!


昆廷的回答是最方便的

但是有其他的方法来解决这个问题,很明显,要想解决它。因为强制特定的模板类型会导致静默转换,所以有时候只进行显式转换可能更明智

double x=1.1;
foo(静态施法(x),boost::词汇施法(y));

经典的例子是使用
std::move
,它只转换为xvalue。

昆汀的回答最方便

但是有其他的方法来解决这个问题,很明显,要想解决它。因为强制特定的模板类型会导致静默转换,所以有时候只进行显式转换可能更明智

double x=1.1;
foo(静态施法(x),boost::词汇施法(y));
典型的例子是使用
std::move
,它只转换为xvalue。

请注意,不能只指定第二个参数。如果您留下一个要推导的参数,它将始终是最后一个参数,即
T2
。请注意,您不能只指定第二个参数。如果您留下一个参数进行推导,它将始终是最后一个参数,即
T2
foo<int>(3.2f, b);
//       ^^^^ Implicit conversion