2014-11-14 61 views
1

因此,例如我想创建一个函数,添加两个数字并返回总数。用不同的参数创建模板函数

template<typename T1, typename T2> 
T1 add(T1 n1, T2 n2){ 
    return n1 + n2; 
} 

的问题是,如果T1intT2float。那么功能将会是return int。但我想要它return float。有一个技巧或方法来实现它?

回答

4

template<typename RT, typename T1, typename T2> 
RT add(T1 n1, T2 n2){ 
    return n1 + n2; 
} 

现在把它想: -

add<float>(2,3.0); 
+0

算术运算符的语法是什么? – Cirvis 2014-11-14 17:44:14

3

导致如果您使用的是C++ 14:

template<typename T1, typename T2> 
auto add(T1 n1, T2 n2) 
{ 
    return n1 + n2; 
} 

这就好比C++ 11的版本,但不要求你写出来的尾随回报型你自己(这很好)。

+0

为什么不'decltype(auto)'? 'add'应该返回一个引用,如果'operator +'为两种类型返回一个 – Columbo 2014-11-14 22:43:07

+0

@Columbo:我承认我对这个东西知之甚少。请随时提出适当的补救措施。 – 2014-11-15 05:06:05

1

另一个C++ 11解决方案将使用std::common_type<T1, T2>::type作为返回类型。