Heim > Backend-Entwicklung > C++ > Hauptteil

Wann sollte man wählen: std::bind vs. Lambdas in C 0x?

Mary-Kate Olsen
Freigeben: 2024-10-30 15:21:12
Original
1024 Leute haben es durchsucht

When to Choose: std::bind vs. Lambdas in C  0x?

Vergleich und Kontrast: std::bind und Lambdas in C 0x

In C 0x stehen Programmierern zwei Optionen zum Erfassen von a gegenüber Funktion: std::bind und Lambdas. Obwohl beide unterschiedliche Zwecke erfüllen, überschneiden sie sich in einigen Anwendungen. Lassen Sie uns die Stärken und Grenzen jedes Ansatzes untersuchen, indem wir ein Beispiel für sich überschneidende Funktionalität nehmen.

Betrachten Sie die Aufgabe, eine Würfelwurffunktion zu erstellen. Mit Lambda können wir dies wie folgt ausdrücken:

<code class="cpp">auto dice = [&]() { return distribution(engine); };</code>
Nach dem Login kopieren

Alternativ können wir mit std::bind schreiben:

<code class="cpp">auto dice = bind(distribution, engine);</code>
Nach dem Login kopieren

Monomorph vs. Polymorphic

Ein grundlegender Unterschied liegt in ihrem Typverhalten. Lambdas sind monomorph, das heißt, sie haben feste Argumenttypen, die zur Kompilierzeit festgelegt werden. Diese Einschränkung schränkt die Flexibilität von Lambdas im Vergleich zu ihren Bindungsgegenstücken ein.

Stellen Sie sich zum Beispiel eine Funktion vor, die zwei Argumente ausgibt:

<code class="cpp">auto f = [](auto a, auto b) { cout << a << ' ' << b; }
Nach dem Login kopieren

Die Verwendung dieses Lambda mit unterschiedlichen Parametertypen führt zu einem Compilerfehler. Im Gegensatz dazu ermöglicht std::bind polymorphes Verhalten, wodurch die Funktion an Argumente unterschiedlicher Typen gebunden werden kann:

<code class="cpp">struct foo {
  template <typename A, typename B>
  void operator()(A a, B b) {
    cout << a << ' ' << b;
  }
};

auto f = bind(foo(), _1, _2);</code>
Nach dem Login kopieren

Durch das Aufschieben der Typableitung bis zum Aufruf der Funktion bietet std::bind eine größere Flexibilität für den Umgang mit verschiedenen Eingabetypen.

Das obige ist der detaillierte Inhalt vonWann sollte man wählen: std::bind vs. Lambdas in C 0x?. 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