c++ - C++ 中的 T 类(您的定义)

标签 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;
}

所以在这种情况下,没有类T,对于每一种数据类型,我们都必须添加其对应的数据类型条件,即对于int,另一组if语句,对于float,另一组if语句。

我说的对吗?

最佳答案

它不一定是 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;
}

这意味着很多重复的代码。在某些情况下,您可以使用 void* 指针(您在 C 语言中经常看到这种情况),但这样做会导致界面丑陋并且没有类型安全性。

值得注意的是,在现实中,你的两个函数调用

showabs(num1); //showabs<int>(num1);
showabs(num2); //showabs<float>(num2);

实际上指向两个不同的函数,一个接受 float ,一个接受整数。因此模板允许编译器为我们进行复制和粘贴(以更智能的方式)。

关于c++ - C++ 中的 T 类(您的定义),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2522343/

相关文章:

c++ - 如何检查我的模板类是否属于特定类类型?

c++ - 可变参数函数在编译时接受相同类型的参数并对其进行迭代

c++如何将几个重载函数之一指定为模板函数中的参数

c++ - 类中定义的友元函数模板是否可供查找? clang++ 和 g++ 不同意

c++ - 如何使用 Intel Edison 连接多个 I2C LCD?

c++ - 通过多重私有(private)继承扩展类——这是一回事吗?

c++ - 根据参数的默认值启用模板参数类型的自动推导

C++ 模板类型规范

c++ - 没有静态指针或符号拷贝的结构中的 CUDA 设备函数指针

c++ - 每个 QFont 的新 QFontDialog?