Maison >développement back-end >C++ >Quand choisir : std::bind vs Lambdas en C 0x ?

Quand choisir : std::bind vs Lambdas en C 0x ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-30 15:21:121065parcourir

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

Comparer et contraster : std::bind et Lambdas en C 0x

En C 0x, les programmeurs sont confrontés à deux options pour capturer un fonction : std :: bind et lambdas. Bien que les deux servent des objectifs distincts, ils se chevauchent dans certaines applications. Examinons les forces et les limites de chaque approche, en prenant un exemple de fonctionnalités croisées.

Considérez la tâche de création d'une fonction de lancer de dés. En utilisant lambda, nous pouvons exprimer cela comme :

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

Alternativement, en utilisant std::bind, nous pouvons écrire :

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

Monomorphe vs. Polymorphe

Une distinction fondamentale réside dans leur comportement de type. Les lambdas sont monomorphes, ce qui signifie qu'ils ont des types d'arguments fixes déterminés au moment de la compilation. Cette contrainte limite la flexibilité des lambdas par rapport à leurs homologues de liaison.

Par exemple, considérons une fonction qui imprime deux arguments :

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

L'utilisation de ce lambda avec différents types de paramètres entraînera un erreur du compilateur. En revanche, std::bind permet un comportement polymorphe, permettant à la fonction d'être liée à des arguments de différents types :

<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>

En différant la déduction de type jusqu'à ce que la fonction soit invoquée, std::bind offre une plus grande flexibilité pour gérer divers types d'entrées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn