std :: Unique_ptr
antworten:
verallgemeinerte Lambda -Erfassung in c 14
std::unique_ptrmyPointer(new int); std::function example = [std::move(myPointer)] { *myPointer = 4; };
in c 14, generalisierte Lambda -Erfassung erlaubt die Verschaffung. Dieser Code ist jetzt gültig: Verwenden von Namespace std;
auto u = make_unique
, um Objekte von einer Lambda in eine andere Funktion zu bewegen, die Lambda mutable zu machen: go.run ([u = move (u)] mutable {do_Something_With (Std :: Move (u));}); 11
Eine Helferfunktion, make_rref, kann die Schaltungsfestigkeit erleichtern. Die Implementierung lautet wie folgt:
std::unique_ptr#includemyPointer(new int); std::function example = [std::move(myPointer)] { *myPointer = 4; };
ein Testfall für make_rref:
std::unique_ptrint main () { std :: Unique_ptrmyPointer(new int); std::function example = [std::move(myPointer)] { *myPointer = 4; };
emulieren verallgemeinerte Lambda -Capture in c 11
Ein weiterer Workaround wird von der facting () function () function:
std::unique_ptr#includemyPointer(new int); std::function example = [std::move(myPointer)] { *myPointer = 4; };
Die Erfassung wird wie folgt implementiert:
std::unique_ptr#includemyPointer(new int); std::function example = [std::move(myPointer)] { *myPointer = 4; };
Diese Lösung verhindert das Kopieren der Lambda, wenn der erfasste Typ nicht kopiert werden kann, wobei die Laufzeitfehler vermieden werden.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3