我本质上有以下代码:
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)
在这些情况下,是否可以不使用辅助函数?
一个,一个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)
| 归档时间: |
|
| 查看次数: |
1784 次 |
| 最近记录: |