Maison >développement back-end >C++ >Quand devriez-vous préférer `std::bind` à Lambdas en C 14 ?

Quand devriez-vous préférer `std::bind` à Lambdas en C 14 ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-23 09:09:34382parcourir

When Should You Prefer `std::bind` Over Lambdas in C  14?

Pourquoi envisager std::bind sur Lambdas en C 14 ?

C 14 a introduit de puissantes expressions lambda, incitant certains à remettre en question la pertinence continue de std::bind. Bien que les lambdas offrent une syntaxe concise, std::bind conserve son utilité dans certains scénarios.

Variables capturées inamovibles :
En C 11, les lambdas ne peuvent capturer que les variables lvalue, tandis que bind permet de déplacer des variables. Grâce à bind, vous pouvez écrire le code suivant :

auto f1 = std::bind(f, 42, _1, std::move(v));

Capturer l'expression :
lambda ne peut pas capturer les expressions directement. Au lieu de cela, bind permet d'écrire comme ceci :

auto f1 = std::bind(f, 42, _1, a + b);

Paramètres de surcharge de l'objet fonction :
En C 14, les lambdas peuvent résoudre ce problème via l'inférence de type, et bind ici Encore une explosion dans la scène.

Impossible de transmettre les paramètres :
Idéalement, la liaison qui doit utiliser le transfert parfait peut être écrite comme le code suivant :

auto f1 = [=](auto&amp;&amp; arg) { f(42, std::forward<decltype(arg)>(arg)); };

Cependant Au lieu de cela, bind le bloque sous la forme suivante :

auto f1 = std::bind(std::declval<decltype(f)>(), 42, _1);
auto f2 = std::bind(f, 42, std::declval<decltype(arg)>(), std::placeholders::_2);

Inconvénients de bind :

  • Les noms de liaison peuvent conduire à une ambiguïté dans les fonctions surchargées.
  • Les fonctions sont plus susceptibles d'être intégrées lors de l'utilisation de bind que de lambda.

Malgré cela, bind a toujours ses avantages. Il produit uniquement un type d'objet fonction, alors que lambda peut produire un type unique pour chaque fonction. En fin de compte, le choix de bind ou lambda dépend de cas d'utilisation et de compromis spécifiques.

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