Проблема с вашим кодом заключается в том, что вы пытаетесь создать функтор на месте таким образом, который недопустим (вы не можете просто бросить код на третий аргумент for_each
, вам нужно передать функтор ).
Без поддержки лямбды в компиляторе вы можете использовать std::transform
вместо std::for_each
(не проверено ... но это должно работать):
std::transform( processors.begin(), processors.end(),
std::ostream_iterator<int>( std::cout, "\n" ),
bind( &text_processors::value_type::operator(), _1, data ) );
Если ваш компилятор поддерживает лямбды, вы можете сделать с ним:
const char data[] = "123";
std::for_each(processors.begin(), processors.end(),
[&data]( text_processors const & ) {
std::cout << boost::bind(&text_processors::value_type::operator(), _1, data)
<< "\n"
}
);
Но тогда вы можете вообще избежать bind
:
std::for_each( processors.begin(), processors.end(),
[&data]( text_processors::value_type & op ) {
std::cout << op( data ) << "\n";
}
);