Sto usando PPL e parallel_for sintassi per avere un ciclo for. Nella clausola di cattura, ho 3 variabili, una delle quali è un membro della classe. C'è un errore di compilazione dovuto alla presenza di un membro della classe tra le variabili nella clausola di cattura. Tuttavia, se ho questo membro della classe nel corpo lambda, non lo compila, e l'errore dichiarato è che la variabile che racchiude l'ambito dovrebbe essere nella clausola di cattura. Come procedere? Dovrei prima copiare il membro della variabile in una variabile locale e farlo passare nella clausola di cattura?C++ - espressione lambda, clausola di acquisizione e membri della classe
Ecco il codice, con formulaCommand il membro della classe.
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_;
});
Grazie!
pena anche di notare che le variabili utente sono sempre catturati per riferimento in quanto sono veramente accessibile attraverso la versione catturata di 'this'. Se si desidera acquisire un membro in base al valore, copiarlo su un locale e acquisirlo per valore. – Potatoswatter
O in questo modo: '[& functionEvaluation, varModel_, =]' –
@KennyTM Potresti espandere l'uso di 'unique_ptr <>', o indicare qualche ref pertinente? grazie – octoback