Maison >développement back-end >C++ >Lambdas vs Bind en C : quand devriez-vous choisir chacun ?

Lambdas vs Bind en C : quand devriez-vous choisir chacun ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-01 02:49:28768parcourir

Lambdas vs. Bind in C  : When Should You Choose Each?

Lambdas vs Bind en C : polymorphisme et efficacité

Lors de la comparaison de l'utilisation de C 0x lambdas et std::bind pour des tâches similaires , le choix entre les deux peut être influencé par des facteurs tels que le polymorphisme et l'efficacité.

Bind vs Lambda en détail

Considérez l'exemple suivant où lambda et bind sont utilisés pour générer des nombres aléatoires à l'aide d'une distribution et d'un moteur :

// Using lambda
auto dice = [&]() { return distribution(engine); };

// Using bind
auto dice = bind(distribution, engine);

Polymorphisme

Contrairement aux lambdas, qui sont monomorphes (c'est-à-dire ont des types fixes), std : :bind permet un comportement polymorphe. Cela signifie que bind peut être utilisé pour créer des fonctions avec des types inconnus, comme démontré ci-dessous :

struct foo {
  typedef void result_type;

  template <typename A, typename B>
  void operator()(A a, B b) {
    cout << a << ' ' << b;
  }
};

auto f = bind(foo(), _1, _2);
f("test", 1.2f); // will print "test 1.2"

Dans cet exemple, les types de a et b sont déduits au moment de l'exécution lorsque f est invoqué. Cette flexibilité n'est pas disponible avec les lambdas.

Efficacité

En général, les lambdas ont tendance à être plus efficaces que la liaison lorsque les variables capturées sont utilisées par valeur. En effet, les lambdas capturent directement les variables, tandis que bind crée un objet de fermeture qui fait référence aux variables capturées. Cependant, bind peut offrir des avantages lorsque les variables capturées sont volumineuses ou lorsque la fonction est appelée fréquemment.

Conclusion

Le choix entre lambdas et bind dépend des exigences spécifiques de la demande. Les lambdas fournissent un polymorphisme et sont efficaces pour capturer de petites variables de type valeur. Bind offre une plus grande flexibilité et peut être préférable lorsqu'il s'agit de fonctions volumineuses ou fréquemment appelé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