


Warum kann ich keine std::function aus einem Move-Capturing-Lambda erstellen?
Konstruieren einer std::function aus einem Move-Capturing-Lambda
Beim Versuch, eine std::function aus einem Move-Capturing-Lambda-Ausdruck zu erstellen, können Schwierigkeiten auftreten , obwohl es keine Probleme beim Erstellen des Lambda selbst gab. Dies liegt an den Einschränkungen, die durch den Konstruktor std::function und seinen Zuweisungsoperator auferlegt werden.
Der Konstruktor std::function und der Operator= erfordern, dass das Argument CopyConstructible ist. Ein Move-Capturing-Lambda, das einen Nur-Move-Typ (z. B. std::unique_ptr) erfasst, kann jedoch nicht CopyConstructible sein.
Zur Klarstellung: Move-Capturing bezieht sich auf den Erfassungsmechanismus, der von Lambda-Ausdrücken verwendet wird. Im Gegensatz zum Copy-Capturing, das eine Kopie der erfassten Variablen erstellt, überträgt das Move-Capturing den Besitz der Variablen auf das Lambda.
Der von Ihnen bereitgestellte Code veranschaulicht das Problem:
auto pi = std::make_unique<int>(0); auto foo = [q = std::move(pi)] { *q = 5; std::cout << *q << std::endl; }; std::function<void()> bar = foo; // Error: attempts to copy-construct 'foo'
Der Lambda-Ausdruck „foo“ erfasst den eindeutigen Zeiger „pi“ durch Verschieben und macht ihn zu einem Nur-Verschieben-Typ. Daher ist das Erstellen einer std::function aus „foo“ nicht möglich, da „foo“ nicht kopiert werden kann.
Um diese Einschränkung zu umgehen, ziehen Sie alternative Ansätze in Betracht, z. B. die Verwendung von std::bind oder das Erstellen einer Wrapper-Klasse das das Lambda kapselt und eine CopyConstructible-Schnittstelle bereitstellt.
Das obige ist der detaillierte Inhalt vonWarum kann ich keine std::function aus einem Move-Capturing-Lambda erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

GULC: C -Bibliothek von Grund auf neu gebaut

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

eindeutiger Gebrauch und Phrasenfreigabe

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient?

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?
