Wie speichert man nicht kopierbare std :: -Funktion in einen Container?

8

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?

    
Thomas Moulard 29.01.2015, 07:15
quelle

2 Antworten

5

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!

    
baol 23.05.2015, 09:59
quelle
0

Sie könnten std::shared_ptr verwenden, was kopierbar ist. Etwas wie

%Vor%

Auf diese Weise wird NonCopyable-Objekt automatisch auf Callback-Destruktoren zerstört.

    
Vladimir Talybin 21.04.2017 12:08
quelle

Tags und Links