我定义了一个泛型函数,如下所示:
template <typename T1, typename T2>
T2 Calculation(T1 arg_one, T1 arg_two)
{
return arg_one + arg_two * 3.14;
}
当我尝试使用这个通用函数时,如下所示:
auto sum = Calculation(2, 3.2);
编译器告诉我:找不到匹配的重载函数。但是,当我尝试使用这个通用函数(如Calculation<double, double>
)时,它工作得很好。
为什么编译器不能推断出第一个示例中参数和返回值的类型?我必须显式定义类型吗?
2条答案
按热度按时间wvmv3b1j1#
问题是
T2
不能从任何函数参数推导出来,T2
也没有任何默认参数,模板参数不能从返回类型推导出来。要解决这个问题,您可以在调用函数时显式指定
T2
的模板参数,或者将T1 arg_two
更改为T2 arg_two
,以便T2
也可以像T1
一样推导,如下所示:a14dhokn2#
此模板代码的返回类型绑定到第二个参数类型。
请考虑更通用的方法来推导返回类型: