boost::bind
で仕事をする方法はありますstd::fill
か?
次のことを試しましたが、うまくいきませんでした。
boost::bind(std::fill, x.begin(), x.end(), 1);
問題はそれ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);