Heim > Backend-Entwicklung > C++ > Wie kann ich Move Capture in C 11 Lambdas erreichen?

Wie kann ich Move Capture in C 11 Lambdas erreichen?

Barbara Streisand
Freigeben: 2024-12-09 20:22:11
Original
861 Leute haben es durchsucht

How Can I Achieve Move Capture in C  11 Lambdas?

Erfassung durch Bewegung in einem C 11-Lambda

Bewegungserfassung in C 14

C 14 führt eine verallgemeinerte Lambda-Erfassung ein, die eine Bewegungserfassung ermöglicht. Diese Funktion ermöglicht Code wie:

using namespace std;

auto u = make_unique<some_type>(some, parameters);  

go.run([u = move(u)] { do_something_with(u); }); 
Nach dem Login kopieren

Workaround für Move Capture in C 11

In C 11 kann Move Capture mithilfe einer Hilfsfunktion make_rref:

#include <cassert>
#include <memory>
#include <utility>

template <typename T>
struct rref_impl
{
    // ... (implementation omitted for brevity)
};

template<typename T> rref_impl<T> make_rref( T && x )
{
    return rref_impl<T>{ std::move(x) };
}
Nach dem Login kopieren
Beispielverwendung:

std::unique_ptr<int> p{new int(0)};
auto rref = make_rref(std::move(p));
auto lambda = [rref]() mutable -> std::unique_ptr<int> { return rref.move(); };
assert(lambda());
assert(!lambda());
Nach dem Login kopieren
Emulierung der generalisierten Lambda-Erfassung in C 11

Generalisierte Lambda-Erfassung kann auch mithilfe einer Erfassungsfunktion emuliert werden:

#include <utility>

template <typename T, typename F>
class capture_impl
{
    // ... (implementation omitted for brevity)
};

template <typename T, typename F>
capture_impl<T,F> capture( T && x, F && f )
{
    // ... (implementation omitted for brevity)
}
Nach dem Login kopieren
Beispielverwendung:

Das obige ist der detaillierte Inhalt vonWie kann ich Move Capture in C 11 Lambdas erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage