gpt4 book ai didi

C++ - lambda 表达式、捕获子句和类成员

转载 作者:可可西里 更新时间:2023-11-01 17:52:18 27 4
gpt4 key购买 nike

我正在使用 PPL 和 parallel_for 语法来创建一个 for 循环。在捕获子句中,我有 3 个变量,其中一个是类成员。由于捕获子句中的变量之间存在类成员,因此存在编译错误。但是,如果我在 lambda 主体中有此类成员,它也不会编译,并且指出的错误是封闭范围中的变量应该在捕获子句中。如何进行?我应该事先将变量成员复制到局部变量,并将其传递到捕获子句中吗?

这是代码,其中 formulaCommand 是类成员。

parallel_for (m_rowStart,m_rowEnd+1,[&functionEvaluation,varModel_,formulaCommand](int i)
{
MLEquationVariableModel model_(varModel_);
model_.addVariable("i", i);
model_.addVariable("j", 1);
MLEquationCommand* command_ = formulaCommand->duplicate(&model_);
double d = command_->execute().toDouble();
if(d==NO_VALUE)
{
functionEvaluation.local() = NO_VALUE;
}
else
{
functionEvaluation.local() += d;
}
delete command_;
});

谢谢!

最佳答案

您需要捕获 this访问成员变量(记住 formulaCommand 等同于 this->formulaCommand )。

[&functionEvaluation, varModel_, this](int i) { ... }

(顺便说一句,您可能应该使用智能指针( unique_ptr<MLEquationCommand> )而不是手动 delete -ing 原始指针 command_ 。)

关于C++ - lambda 表达式、捕获子句和类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10379976/

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