如何创建添加数字的模板函数

时间:2013-12-04 18:17:23

标签: c++ templates

我需要创建一个模板函数,该函数获取用户将输入的值的数量 然后在结束时返回总数。我做了一个,由于相同的数据类型,它工作正常 模板专业化。但是当使用不同的数据类型(如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");
}

2 个答案:

答案 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

这样您就不必指定返回类型。