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

时间:2012-04-30 07:27:29

标签: c++ lambda parallel-processing ppl

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

这是代码,其中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_;
    });

谢谢!

1 个答案:

答案 0 :(得分:7)

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

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

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