Могу ли я использовать boost::bind() с mem_fun_ref()?

Мой вопрос довольно прост: могу ли я сделать что-то подобное?

Скажем, класс foo содержит следующую функцию-член:

foo foo::DoSomething(input_type1 input1, input_type2 input2)
{
    ... // Adjust private datamembers
    return *this;
}

Используя foo:

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() принимает одинарную или нулевую функцию и DoSomething() является двоичным

1 ответ

Решение

Вам не нужно 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)
Другие вопросы по тегам