3

私の質問は非常に簡単です。このようなことはできますか?

クラス 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::transform(foovec.begin(), foovec.end(), foovec.begin(), boost::bind(std::mem_fun_ref(&foo::DoSomething), _1, in1, in2)));

std::mem_fun_ref()単項または null の関数を取り、DoSomething()バイナリであるためです。

4

1 に答える 1

3

は必要ありませんstd::mem_fun_ref。次を使用してください。

std::transform(foovec.begin(),
               foovec.end(),
               foovec.begin(),
               boost::bind(&foo::DoSomething, _1, in1, in2));

boost::bindまたは、次のように置き換えることができます

std::bind(&foo::DoSomething, std::placeholders::_1, in1, in2)
于 2012-04-18T00:49:39.570 に答える