любые функторы stl / boost для вызова оператора () - PullRequest
3 голосов
/ 17 июня 2010
template <typename T>
struct Foo
{
    void operator()(T& t) { t(); }
};

Существует ли какой-либо стандартный или бустерный функтор с аналогичной реализацией?

Мне нужно перебрать контейнер функторов:

std::for_each(beginIter, endIter, Foo<Bar>());

Или, может быть, есть другой способ сделать это?

Ответы [ 3 ]

4 голосов
/ 17 июня 2010

Связыватели типа Boosts или C ++ 0x bind() упрощают создание такого функтора:

std::for_each(begin, end, boost::bind(&Bar::operator(), _1));

Или используя mem_fun_ref:

std::for_each(v.begin(), v.end(), std::mem_fun_ref(&Bar::operator()));
1 голос
/ 17 июня 2010

Может быть немного менее многословно с BOOST_FOREACH, особенно если у вас есть автоматическая поддержка C ++ 0x:

BOOST_FOREACH(auto f, v) {f();}
0 голосов
/ 28 июня 2010

По крайней мере, я нашел это. boost :: apply должен делать всю работу

std::for_each(beginIter, endIter, boost::bind(boost::apply<void>(), _1));
...