私の質問はかなり簡単です:私はこれのような何かをすることができますか?mem_fun_ref()でboost :: bind()を使用できますか?
セイクラスfooは、次のメンバ関数が含まれています
FOOを使用してfoo foo::DoSomething(input_type1 input1, input_type2 input2)
{
... // Adjust private datamembers
return *this;
}
:
std::vector<foo> foovec;
input_type1 in1;
input_type2 in2;
...
std::transform(foovec.begin(), foovec.end(), foovec.begin(), std::mem_fun_ref(boost::bind(&foo::DoSomething, in1, in2)));
だから、これは可能ですか?この問題は、boost::bind()
が動作する関数のメンバ/非メンバの性質に影響を与えるかどうかにかかわらずです。 std::mem_fun_ref()
は単項または引数なしの関数を取り、DoSomething()
がバイナリであるため、
std::transform(foovec.begin(), foovec.end(), foovec.begin(), boost::bind(std::mem_fun_ref(&foo::DoSomething), _1, in1, in2)));
:私は、私はこのような他の方法の周りにそれについて移動することはできません数えます。
で
boost::bind
を置き換えることができます[Boost.Function](http://www.boost.org/doc/libs/1_49_0/doc/html/function.html)と一緒に? –どのバージョンのBoostを使用していますか? 'boost :: bind(&foo :: DoSomething、_1、in1、in2)'はそのまま使えます。 [文書化されているように](http://www.boost.org/doc/libs/1_49_0/libs/bind/bind.html#with_member_pointers)。 'boost :: phoenix :: bind'も同じです(Boost.PhoenixはBoost.Bindの優れた代替手段であると思われるBoost.Lambdaの優れた代替手段であると考えられているので)。 –