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