Lambdas vs. Bind en C: polimorfismo y eficiencia
Al comparar el uso de C 0x lambdas y std::bind para tareas similares , la elección entre los dos puede verse influenciada por factores como el polimorfismo y la eficiencia.
Bind vs. Lambda en Detalle
Considere el siguiente ejemplo donde se usan tanto lambda como bind para generar números aleatorios usando una distribución y un motor:
// Using lambda auto dice = [&]() { return distribution(engine); }; // Using bind auto dice = bind(distribution, engine);
Polimorfismo
A diferencia de las lambdas, que son monomórficas (es decir, tienen tipos fijos), std::bind permite polimorfismo comportamiento. Esto significa que bind se puede utilizar para crear funciones con tipos desconocidos, como se demuestra a continuación:
struct foo { typedef void result_type; templatevoid operator()(A a, B b) { cout En este ejemplo, los tipos de a y b se deducen en tiempo de ejecución cuando se invoca f. Esta flexibilidad no está disponible con lambdas.
Eficiencia
En general, las lambdas tienden a ser más eficientes que la vinculación cuando las variables capturadas se utilizan por valor. Esto se debe a que las lambdas capturan variables directamente, mientras que bind crea un objeto de cierre que hace referencia a las variables capturadas. Sin embargo, bind puede ofrecer ventajas cuando las variables capturadas son grandes o cuando la función se llama con frecuencia.
Conclusión
La elección entre lambdas y bind depende de los requisitos específicos de la aplicación. Las lambdas proporcionan polimorfismo y son eficientes para capturar variables pequeñas de tipo valor. Bind ofrece mayor flexibilidad y puede ser preferible cuando se trata de funciones grandes o llamadas con frecuencia.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3