1

你能帮我理解为什么这段代码不能编译吗?我正在尝试理解 C++ 模板。

#include <iostream>
#include <algorithm>
#include <vector>

template <class myT>
void myfunction (myT i)
{
  std::cout << ' ' << i;
}

int main ()
{
  double array1[] = {1.0, 4.6, 3.5, 7.8};

  std::vector<double> haystack(array1, array1 + 4);

  std::sort(haystack.begin(), haystack.end());

  std::cout << "myvector contains:";
  for_each (haystack.begin(), haystack.end(), myfunction);
  std::cout << '\n';
  return 0;
}
4

2 回答 2

2

因为您要传递myfunction给一个函数,所以它无法自动确定要使用哪个模板,所以您必须告诉它myfunction<double>

这在直接调用它时并不适用,myfunction(2.0)因为为了方便起见,编译器会根据你给它的参数确定要使用哪个模板。

于 2013-03-09T03:20:27.390 回答
1

模板就像蓝图。可能有很多myfunctions,每个都采用不同的类型。在这种情况下,您必须在实例化它时给出类型,以告诉编译器使用哪一个:

for_each (haystack.begin(), haystack.end(), myfunction<double>);
                                                      ^^^^^^^^
于 2013-03-09T03:19:59.490 回答