Ich möchte Callbacks in einem Vektor oder einem anderen Container in C ++ 11 speichern.
Eine Möglichkeit wäre, einen Vektor von std :: function zu speichern. Dies funktioniert gut für Lambda oder Std :: Bind mit kopierbaren Argumenten.
Wenn es jedoch ein nicht kopierbares (nur bewegliches) Argument gibt, wird es aufgrund der Konvertierung vom internen Typ lambda / std :: bind in die std :: function ...
fehlschlagen %Vor%Gibt es eine Möglichkeit, std :: bind-Argumente in die std :: -Funktion zu verschieben, anstatt sie zu kopieren?
std::ref
und std::cref
sollen in diesem Fall verwendet werden, um das Kopieren des Objekts zu vermeiden (siehe Ссылка ).
Ich bin mir nicht sicher, ob ich deine Frage richtig verstanden habe, aber das kompiliert sich für mich:
%Vor%EDIT: Wie in den Kommentaren erwähnt, sei vorsichtig mit dem Lebenszyklus der referenzierten Variablen!
Sie könnten std::shared_ptr
verwenden, was kopierbar ist. Etwas wie
Auf diese Weise wird NonCopyable-Objekt automatisch auf Callback-Destruktoren zerstört.