Вызов всех функторов в контейнере - PullRequest
3 голосов
/ 16 декабря 2010

У меня есть последовательность объектов std :: function (очень примитивная форма сигнальной системы).Существует ли стандартная (в C ++ 0x) функция или функтор, который будет вызывать данную функцию std :: function?Сейчас я использую

std::for_each(c.begin(), c.end(), 
              std::mem_fn(&std::function<void ()>::operator()));

ИМХО, это std::mem_fn(&std::function<void ()>::operator()) безобразно.Я хотел бы иметь возможность написать

std::for_each(c.begin(), c.end(), funcall);

Есть ли такой funcall?Альтернативно, я могу реализовать функцию

template<typename I>
void callInSequence(I from, I to)
{
  for (; from != to; ++from) (*from)();
}

Или, возможно, мне придется использовать систему сигналов / слотов, такую ​​как Boost :: Signals, но у меня есть ощущение, что это излишнее (мне не нужна многопоточностьподдержка здесь, все std::function строятся с использованием std :: bind).

1 Ответ

5 голосов
/ 16 декабря 2010

Я не знаю ни о какой применимой функции. Однако в C ++ 0x вы можете использовать лямбда-выражения и написать следующее.

std::for_each(c.begin(), c.end(),
    [](std::function<void ()> const & fn) { fn(); });

В качестве альтернативы, вы можете использовать новый цикл for.

for (auto const & fn: c)
    fn();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...