1

boost::bindで仕事をする方法はありますstd::fillか?

次のことを試しましたが、うまくいきませんでした。

boost::bind(std::fill, x.begin(), x.end(), 1);
4

1 に答える 1

10

問題はそれstd::fillがテンプレート関数であるということです。テンプレート関数は、インスタンス化されるまで、つまり、実際には存在しません。のアドレスはstd::fill実際には存在しないため、取得できません。これは、異なるタイプを使用する同様の関数の単なるテンプレートです。テンプレートパラメータを指定すると、テンプレートの特定のインスタンス化が参照され、すべてが正常になります。

このstd::fill関数には、2つのテンプレートパラメーターがあります。コンテナーへのイテレーターのタイプであるForwardIteratorTypeと、コンテナーが保持するタイプであるDataTypeです。両方を提供する必要があるため、コンパイラーは、std::fill使用するテンプレートのインスタンス化を認識します。

std::vector<int> x(10);
boost::bind(std::fill<std::vector<int>::iterator, int>, x.begin(), x.end(), 1);
于 2010-08-03T22:04:07.577 に答える