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 in Détail
Prenons 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 le polymorphisme comportement. 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; templatevoid operator()(A a, B b) { cout 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.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3