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

テンプレートは設計図のようなものです。多くの が存在する可能性がありmyfunction、それぞれが異なる型を取ります。この場合、どのタイプを使用するかをコンパイラに伝えるために、インスタンス化するときにタイプを指定する必要があります。

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