Я имею в сущности следующий код:Invoke станд :: функция в станд :: for_each
typedef std::function<void()> fnGlobalChangeEvent;
typedef std::vector<fnGlobalChangeEvent> GlobalTriggers;
inline void ExecuteGlobal(fnGlobalChangeEvent ev)
{
ev();
}
GlobalTriggers triggers;
std::for_each(triggers.begin(), triggers.end(), std::bind(&ExecuteGlobal, _1));
Использование ExecuteGlobal чувствует себя совершенно излишним, но я не могу найти правильный синтаксис для выпадать вызов.
std::for_each(triggers.begin(), triggers.end(), ExecuteGlobal(_1));
std::for_each(triggers.begin(), triggers.end(), std::bind(_1));
Оба не могут скомпилировать.
Существует также более сложный случай:
typedef std::function<void (Zot&)> fnChangeEvent;
typedef std::vector<fnChangeEvent> Triggers;
inline void Execute(fnChangeEvent ev, Zot& zot)
{
ev(zot);
}
Triggers triggers;
std::for_each(triggers.begin(), triggers.end(), std::bind(&Execute, _1, zot));
Можно ли обойтись без вспомогательных функций в этих случаях?
Возможно, вы захотите взглянуть на новый синтаксис 'for' в последнем стандарте C++ (C++ 11): http://en.wikipedia.org/wiki/C%2B%2B11#Range -based_for-loop – lvella
Для вашего первого примера, избыточным является использование std :: bind: 'std :: for_each (triggers.begin(), triggers.end(), ExecuteGlobal);' –
@ benjamin-lindley : спасибо, я работал от более сложного случая и пропустил лишнюю избыточность там! –