Bir kolu göndermek istiyorum ama sadece paylaşılan bir işaretçi hala geçerli olup olmadığını yürütülecek istiyorum:Bir lambda yakalama maddesi içinde bir değişken bildirebilir miyim?
// elsewhere in the class:
std::shared_ptr<int> node;
// later on:
const std::weak_ptr<int> slave(node); // can I do this in the capture clause somehow?
const auto hook = [=]()
{
if (!slave.expired())
//do something
else
// do nothing; the class has been destroyed!
};
someService.Submit(hook); // this will be called later, and we don't know whether the class will still be alive
Ben lambda yakalama maddesi içinde slave
bildirebilir misiniz? const auto hook = [std::weak_ptr<int> slave = node,=]()....
gibi bir şey ama maalesef bu işe yaramıyor. Değişkeni ilan etmekten kaçınmak ve sonra kopyalamak istiyorum (performans nedenleriyle değil, sadece lambda'nın kapsamını kirletmeden ne olursa olsun yaratabileceğimi daha net ve net olacağını düşünüyorum).
Sadece C++ 14'te söylediğim için üzgünüm. – chris
@chris ah ... ben C++ 1y bayrağını ekledim, eğer bunu bir cevap olarak eklemek isterseniz onu işaretleyeceğim. Şerefe. – arman