gpt4 book ai didi

c++ - 调整捕获的 lambda 值

转载 作者:行者123 更新时间:2023-11-27 22:59:56 25 4
gpt4 key购买 nike

我有以下情况:

int p;

[p]() {
// really complex and really long code executing outside the main thread
}

lambda 对象应该在我的代码中的几个地方实例化,p 每次都被捕获。问题是,lambda 的代码相当长并且取决于 p,我不想在各处复制和粘贴相同的代码。我不愿意通过引用捕获,因为 lambda 在线程的上下文中执行并且引用的对象可能会更改。最好的办法是什么?通过引用捕获一个 thread_local 变量能以某种方式帮助吗?

编辑:

最后我是这样的:

::std::function<void(int)> f; // captures the lambda

int p;

run_in_thread(::std::bind(f, p));

我之前没有想到这一点的原因是关于lambdas over ::std::bind的优越性的讨论。 ,但显然它们并非用于所有目的。

最佳答案

如果你想要干净的代码,你通常应该避免使用大体的 lambda。因此,最简洁的解决方案可能是将您的代码移动到一个新函数中,而 lambda 又会调用该函数。

void complexFunction(int p) {
// really complex and really long code executing outside the main thread
}

void run() {
for(int i = 0; i < 10; ++i)
runThread([i]() {complexFunction(i);});
}

关于c++ - 调整捕获的 lambda 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28805536/

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