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!