Tôi đang sử dụng cú pháp PPL và parallel_for để có vòng lặp for. Trong mệnh đề capture, tôi có 3 biến, một trong số chúng là một thành viên của lớp. Có một lỗi biên dịch do sự hiện diện của một thành viên lớp trong số các biến trong mệnh đề chụp. Tuy nhiên, nếu tôi có thành viên lớp này trong phần lambda, nó cũng không biên dịch, và lỗi được nêu là biến trong phạm vi kèm theo phải nằm trong mệnh đề capture. Làm thế nào để tiến hành? Tôi có nên sao chép biến thành viên vào biến cục bộ trước và chuyển nó vào mệnh đề chụp không?C++ - biểu thức lambda, mệnh đề chụp và thành viên lớp
Đây là mã, với công thứcCommand thành viên của lớp.
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_;
});
Cảm ơn!
Cũng đáng chú ý là các biến thành viên luôn bắt bởi tham khảo vì chúng là thực sự được truy cập thông qua phiên bản được chụp của 'this'. Nếu bạn muốn chụp một thành viên theo giá trị, sau đó sao chép nó vào một địa phương và sau đó chụp giá trị đó. – Potatoswatter
Hoặc như thế này: '[& functionEvaluation, varModel_, =]' –
@KennyTM Bạn có thể mở rộng sử dụng 'unique_ptr <>', hoặc chỉ vào một số ref có liên quan? cảm ơn – octoback