8
我正在使用PPL和parallel_for語法創建一個for循環。在capture子句中,我有3個變量,其中一個是類成員。由於捕獲條款中變量中存在類成員,因此存在編譯錯誤。然而,如果我在lambda體中有這個類成員,它也不會編譯,並且聲明的錯誤是封閉範圍中的變量應該在capture子句中。如何進行?我應該事先將變量成員複製到本地變量,並將它傳遞給capture子句?C++ - 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'版本進行訪問。如果您想通過值捕獲成員,請將其複製到本地,然後按值捕獲該成員。 – Potatoswatter
或者像這樣:'[&functionEvaluation,varModel_,=]' –
@KennyTM你可以擴展使用'unique_ptr <>',或指向一些相關的ref?謝謝 – octoback