3

我有这个代码:

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 还是双精度值。

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

4

3 回答 3

9

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

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

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

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

于 2013-03-22T18:34:22.777 回答
2

你不能,但你不需要。

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

例如,如果您传入两个 int,则结果将为 int。如果你传入一个 double 和一个 long,它将是一个 double。

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

于 2013-03-22T18:35:45.877 回答
1

如果您不行为,您可以使用参考使编译器警告您。

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

但如果您可以使用 C++11,请auto改用。

于 2013-03-22T19:33:16.797 回答