Maison >développement back-end >C++ >Quand devriez-vous préférer `std::bind` à 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&& 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 :
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!