gpt4 book ai didi

c++ - 在 std::for_each 中调用 std::function

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:14:47 25 4
gpt4 key购买 nike

我本质上有以下代码:

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));

在这些情况下可以不用辅助函数吗?

最佳答案

当然,一个 lambda:

std::for_each(
triggers.begin(), triggers.end(),
[](fnChangeEvent ev) { ev(); }
);
std::for_each(
triggers.begin(), triggers.end(),
[&zot](fnChangeEvent ev) { ev(zot); }
);

或者更好的是,范围:

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

// well, I think you can figure out the second one

关于c++ - 在 std::for_each 中调用 std::function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10250519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com