Пытаясь освоиться с boost
, столкнулся с проблемой использования boost::function
вместе с std::vector
. Я пытаюсь сделать простую вещь: получить список функций с похожими сигнатурами, а затем использовать все эти функции с std::for_each
для выборочных данных. Вот код:
typedef boost::function<int (const char*)> text_processor;
typedef std::vector<text_processor> text_processors;
text_processors processors;
processors.push_back(std::atoi);
processors.push_back(std::strlen);
const char data[] = "123";
std::for_each(processors.begin(), processors.end(),
std::cout << boost::bind(&text_processors::value_type::operator(), _1, data)
<< "\n"
);
Итак, с помощью for_each
я пытаюсь вывести на стандартный вывод результат применения каждой функции к выборочным данным. Но так не скомпилируется (какое-то длинное сообщение об отсутствии оператора <<
для результата bind
).
Если я уберу потоковые операторы, у меня будет компилируемый, но бесполезный код. Хитрость в том, что я хочу выполнять применение функций и вывод текста в одном for_each
. Что мне не хватает? Думал, что это должно быть легко с лямбда-выражениями или чем-то подобным, но не могу найти правильное решение.