c++中的模板变量

Template variables in C++

本文关键字:变量 c++      更新时间:2023-10-16

我有这样的代码:

template <class T>
T GetMax (T a, T b) {
  return (a>b?a:b);
}

int main () {
  int i=51, j=26, k;
  long l=100, m=15, n;
  k=GetMax(i,j);
  n=GetMax(l,m);
  cout << k << endl;
  cout << n << endl;
  return 0;
}

如何更改变量k和n的数据类型,使它们能够动态地接受返回值?如果返回值是双精度类型,那么k和n将自动成为双精度类型,所以我不需要为传递int还是double而烦恼。

我试着在网上和我的书中搜索,但没有运气。你能帮帮我吗?我是模板新手。

在c++ 11中,您可以使用auto:

auto k = GetMax(i,j);
auto n = GetMax(l,m);

kn的类型由初始化它们的表达式推导出来。

在c++ 11之前,需要显式地给出类型。但是,您应该总是能够以某种形式编写类型,因为您知道参数的类型。

你不能,但你不需要。

GetMax总是在你知道你传入的类型的上下文中被调用,所以你知道返回类型是什么。

例如,如果传入两个int型,结果将是int型。如果传入一个double类型和一个long类型,它将是double类型。

将模板视为类型安全的宏。用被替换类型的函数体替换函数的调用,这就是它要做的。

如果你不遵守规则,你可以使用引用让编译器警告你。

template <class T>
void GetMax (T a, T b, T& output) {
  output = (a>b?a:b);
}

但如果你可以使用c++ 11,使用auto代替