用于添加的通用模板函数

时间:2015-08-15 15:43:17

标签: c++ templates

我是C ++的新学习者。我想编写适用于所有数据类型的通用代码。我相信我必须在我的程序中编写名为add()的模板函数,它应该采用两个模板参数来添加这些传递的参数并返回添加结果。即。

template <class T> 
T add (T value1, T value2){
     T sum = value1+value2;
    return sum;
}

在main()函数中,我想为int,float和Complex类型调用模板函数add()。

int v1 = 5, v2 = 6 ; 
    cout << "Addtion of int values = " << add(v1, v2);
float x = 2.3, y = 3.5 ;
    cout << "Addtion of float values = " << add(x, y);
Complex c1(2, 3), c2(2, 3), t ;
    cout << "Addtion of complex values = " << add(c1, c2);

但是在添加函数时,我需要编写哪种代码来添加这些类型的参数?

2 个答案:

答案 0 :(得分:0)

  

在添加功能中,我是否需要为每种类型编写专门的代码

不,如果类型可以与 var deReg = scope.$watch(function(){return ctrl.$viewValue}, function() { console.log(scope.data); scope.data.error = !scope.data.error; console.log("This function triggered " + n + " times."); n++; }); elem.on( '$destroy', deReg); scope.$on( '$destroy', deReg); 一起使用,则不会。这就是模板功能为您做的事情。

LIVE

答案 1 :(得分:0)

你需要了解模板的关键点。我正在明确地列出它们。

  1. 这个词&#39;模板&#39; in dictionary表示用于创建类似对象的预定义模式。
  2. c ++中的功能模板类似,它们用于创建相同的功能但具有不同的参数或参数
  3. 我们使用占位符类型参数定义模板函数,在这种情况下,占位符类型是类T类型参数
  4. 你一定注意到你不能直接调用模板函数,因为编译器不直接在你定义的模板函数中知道占位符类型,而是用函数调用中提供的参数定义替换那些占位符类型通过这种方式,它可以从模板中创建多种相同功能。
  5. 现在我正在使用你的代码,你只需要编写一个通用代码,因为当你用不同的数据类型调用函数时,模板会自动创建每种类型的实例。如果必须为每种数据类型编写不同的版本然后你可以重载方法而不是使用模板。模板的优点是它充当泛型类型函数,当编译器在代码中遇到模板化函数调用时,它会自动创建不同数据类型的实例。 我还想在你的代码中添加一些东西,你已经为复杂类型调用了模板化函数。软件模板也适用于你定义的类型,但是你必须记住,当你使用模板和用户定义的类型时,在你的如果是复杂类,则还必须重载模板化函数中使用的必要运算符,即必须重载+运算符,否则语句Complex c1(2,3),c2(2,3),t; cout&lt;&lt; &#34;复杂值的添加=&#34; &LT;&LT; add(c1,c2);会抛出错误。
  6. 请分享您的反馈,我为您的回复而烦恼。