因此,例如我想创建一个函数,添加两个数字并返回总数。用不同的参数创建模板函数
template<typename T1, typename T2>
T1 add(T1 n1, T2 n2){
return n1 + n2;
}
的问题是,如果T1
是int
和T2
是float
。那么功能将会是return int
。但我想要它return float
。有一个技巧或方法来实现它?
因此,例如我想创建一个函数,添加两个数字并返回总数。用不同的参数创建模板函数
template<typename T1, typename T2>
T1 add(T1 n1, T2 n2){
return n1 + n2;
}
的问题是,如果T1
是int
和T2
是float
。那么功能将会是return int
。但我想要它return float
。有一个技巧或方法来实现它?
是
template<typename RT, typename T1, typename T2>
RT add(T1 n1, T2 n2){
return n1 + n2;
}
现在把它想: -
add<float>(2,3.0);
如果您正在使用C++11
decltype
是你的朋友
template<typename T1, typename T2>
auto add(T1 n1, T2 n2) -> decltype(n1 + n2) {
return n1 + n2;
}
这将使用类型从n1 + n2
更多在http://en.wikipedia.org/wiki/C%2B%2B11#Alternative_function_syntax
导致如果您使用的是C++ 14:
template<typename T1, typename T2>
auto add(T1 n1, T2 n2)
{
return n1 + n2;
}
这就好比C++ 11的版本,但不要求你写出来的尾随回报型你自己(这很好)。
为什么不'decltype(auto)'? 'add'应该返回一个引用,如果'operator +'为两种类型返回一个 – Columbo 2014-11-14 22:43:07
@Columbo:我承认我对这个东西知之甚少。请随时提出适当的补救措施。 – 2014-11-15 05:06:05
另一个C++ 11解决方案将使用std::common_type<T1, T2>::type
作为返回类型。
算术运算符的语法是什么? – Cirvis 2014-11-14 17:44:14