oin*_*ink 0 c++ templates template-meta-programming c++11 c++14
模板似乎无法对原始操作的结果进行类型推断.例如,以下内容无法推断R:
template<typename A, typename B, typename R>
R addNumbers(A x, B y){
return x + y;
}
main(){
addNumbers(1.0f, 1);
}
Run Code Online (Sandbox Code Playgroud)
尽管很清楚float + int = float.
在任何版本的C++中,是否有某种方法可以在不明确指定的情况下将此信息考虑在内?
调用函数时模板参数推导无法查看函数体; 它只是试图使函数的参数类型与参数类型相同,并且任何无法通过这种方式推导出的模板参数都不会受到影响.您需要一种基于函数体中的return语句的演绎形式.这auto在C++ 14中提供:
template<typename A, typename B>
auto addNumbers(A x, B y){
return x + y;
}
Run Code Online (Sandbox Code Playgroud)