Ich möchte einen Griff unterbreiten, aber ich will es nur dann, wenn ein gemeinsamer Zeiger noch gültig ist ausgeführt werden:Kann ich eine Variable innerhalb einer Lambda Capture-Klausel deklarieren?
// 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
Kann ich innerhalb des Fang-Klausel der Lambda erklären slave
? So etwas wie const auto hook = [std::weak_ptr<int> slave = node,=]()....
, aber leider funktioniert das nicht. Ich würde es gerne vermeiden, die Variable zu deklarieren und dann zu kopieren (nicht aus Performance-Gründen; ich denke nur, es wäre klarer und sauberer, wenn ich alles schaffen könnte, was das Lambda braucht, ohne den umschließenden Bereich zu verschmutzen).
Nur in C++ 14, tut mir leid zu sagen. – chris
@chris ah ... Nun, ich habe die C++ 1y Flagge hinzugefügt, wenn Sie das als Antwort hinzufügen möchten, werde ich es markieren. Prost. – arman