我需要创建一个模板函数,该函数获取用户将输入的值的数量 然后在结束时返回总数。我做了一个,由于相同的数据类型,它工作正常 模板专业化。但是当使用不同的数据类型(如int和double)时,它不会:
#include<iostream>
using namespace std;
template <class first, class seconde>
void total (first a, seconde b){
static first m=0;
static seconde f=0;
++f;
if(b==m){
m+=a;
cout<<m<<endl;
}
m+=a;
}
void main(){
total(2,2);
total(1,2);
system("pause");
}
答案 0 :(得分:3)
如果您只是想使用模板功能添加两个数字,可以这样做:
#include <iostream>
template <typename T1, typename T2, typename rType = double>
rType total(T1 a, T2 b) {
return static_cast<rType>(a + b);
}
int main() {
std::cout << total<int,int>(1,2) << std::endl; //3 - returns double
std::cout << total<int,int,int>(1,2) << std::endl; //3 - returns int
std::cout << total<int,double>(1,2.5) << std::endl; //3.5 - returns double
std::cout << total<double,double>(1.3,2.6) << std::endl; //3.9 - returns double
}
传递第三种数据类型将允许您更改返回类型。
答案 1 :(得分:2)
使用c ++ 11
template<class Lhs, class Rhs>
auto adding_func(const Lhs &lhs, const Rhs &rhs) -> decltype(lhs+rhs) {return lhs + rhs;}
示例来自here
这样您就不必指定返回类型。