Cpp*_*ner 2 c++ templates function-templates
在c ++中使用类T的一个优点是减少在函数中重新定义数据类型的时间,如果这些数据类型在其他函数中定义,例如在int main中.
template <class T>
void showabs(T number)
{
if (number < 0 )
number = -number;
cout << number << endl;
return 0;
}
int main()
{
int num1 = -4;
float num2 = -4.23f;
showabs(num1);
showabs(num2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,没有类T,对于每种数据类型,我们必须添加其相应的数据类型条件,即另一组if语句用于int,另一组用于float.
我对么?
Yac*_*oby 12
它不一定是class T.它可以是class Key或任何你想要的(你也可以typename代替class).正确的术语是功能模板.使用函数模板消除了为可能传递给它的每种类型重新定义函数的要求.因此,如果您不使用模板,则必须定义两个函数:
void showabs(float number){
if (number < 0 ) number = -number;
cout << number << endl;
}
void showabs(int number){
if (number < 0 ) number = -number;
cout << number << endl;
}
Run Code Online (Sandbox Code Playgroud)
这意味着很多重复的代码.在某些情况下你可以使用void*指针(你在C中看到很多),但这样做会导致丑陋的界面以及没有类型的安全性.
值得注意的是,实际上,你的两个函数调用
showabs(num1); //showabs<int>(num1);
showabs(num2); //showabs<float>(num2);
Run Code Online (Sandbox Code Playgroud)
实际上指向两个不同的函数,一个采用浮点数,另一个采用整数.因此模板允许编译器为我们进行复制和粘贴(以更智能的方式).