For döngüsüne sahip olmak için PPL ve parallel_for sözdizimini kullanıyorum. Yakalama maddesinde 3 değişkenim var, bunlardan biri sınıf üyesi. Yakalama maddesindeki değişkenler arasında bir sınıf üyesinin varlığı nedeniyle bir derleme hatası var. Ancak, eğer lambda bedeninde bu sınıf üyeye sahip olsaydım, bu, ya derleme yapmaz ve hata, kapsamın kapsamındaki değişkenin yakalama maddesi olması gerektiğidir. Nasıl devam edilir? Değişken üyeyi önceden bir yerel değişkene kopyalayıp yakalama maddesine geçirmeli miyim?C++ - lambda ifadesi, yakalama maddesi ve sınıf üyeleri
Buradaki kod, sınıf üyesi formülüCommand ile.
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_;
});
Teşekkürler!
daima referans ile yakalanır Bu 'yakalanan' sürümünden gerçekten erişildi. Bir üyeyi değer olarak yakalamak istiyorsanız, onu bir yerel kopyaya kopyalayın ve ardından bu değeri yakalayın. – Potatoswatter
Veya bunun gibi: '[& functionEvaluation, varModel_, =]' –
@KennyTM 'unique_ptr <> 'kullanımını genişletebilir misiniz, ya da bazı ilgili ref işaret edebilir misiniz? teşekkürler – octoback