在std :: for_each中调用std :: function

Rob*_*ker 6 c++ std c++11

我本质上有以下代码:

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));
Run Code Online (Sandbox Code Playgroud)

在这里使用ExecuteGlobal感觉完全是多余的,但我找不到正确的语法来退出调用.

std::for_each(triggers.begin(), triggers.end(), ExecuteGlobal(_1));
std::for_each(triggers.begin(), triggers.end(), std::bind(_1));
Run Code Online (Sandbox Code Playgroud)

两者都无法编译.

还有一个更复杂的案例:

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));
Run Code Online (Sandbox Code Playgroud)

在这些情况下,是否可以不使用辅助函数?

Cat*_*lus 7

一个,一个lambda:

std::for_each(
    triggers.begin(), triggers.end(),
    [](fnChangeEvent ev) { ev(); }
);
std::for_each(
     triggers.begin(), triggers.end(),
     [&zot](fnChangeEvent ev) { ev(zot); }
);
Run Code Online (Sandbox Code Playgroud)

甚至更好,范围:

for (auto ev : triggers) {
    ev();
}

// well, I think you can figure out the second one
Run Code Online (Sandbox Code Playgroud)