C ++中的模板变量

时间:2013-03-22 18:33:21

标签: c++ templates

我有这段代码:

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的数据类型,以便它们足够动态以接受返回的值。如果返回的值是double,则k和n将自动加倍,所以我无需担心我是传递int还是double。

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

3 个答案:

答案 0 :(得分:9)

在C ++ 11中,您可以使用auto

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

kn的类型是从用于初始化它们的表达式中推导出来的。

在C ++ 11之前,您需要明确地提供类型。但是,您应该始终能够以某种形式编写类型,因为您知道参数的类型。

答案 1 :(得分:2)

你不能,但你不需要。

GetMax将始终在您知道传入的类型的上下文中被调用,因此您知道返回类型可能是什么。

例如,如果传入两个整数,则结果为int。如果你传入一个双倍和一个长,它将是一个双倍。

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

答案 2 :(得分:1)

如果你不表现,你可以使用引用让编译器发出警告。

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

但是如果你可以使用C ++ 11,请改用auto