Pregunta

¿Cuál podría ser la mejor forma de comenzar a programar utilizando las bibliotecas boost lambda?

¿Fue útil?

Solución

Permaneciendo dentro de los límites del lenguaje y las bibliotecas de C ++, sugeriría que se acostumbrara primero a la programación usando plantillas de función de algoritmo STL, ya que uno de los usos más comunes que tendrá para boost :: lambda es reemplazar las clases de functor con expresiones en línea en línea.

La documentación de la biblioteca en sí misma le ofrece un ejemplo inicial de para qué sirve:

for_each(a.begin(), a.end(), std::cout << _1 << ' ');

donde std::cout << _1 << ' ' produce un objeto de función que, cuando se llama, escribe su primer argumento en la secuencia cout. Esto es algo que podría hacer con una clase functor personalizada, std::ostream_iterator o un bucle explícito, pero boost :: lambda gana en concisión y probablemente claridad, al menos si está acostumbrado a los conceptos de programación funcional.

Cuando (sobre) usa el STL, se encuentra gravitando hacia boost :: bind y boost :: lambda. Es muy útil para cosas como:

std::sort( c.begin(), c.end(), bind(&Foo::x, _1) < bind(&Foo::x, _2) );

Antes de llegar a ese punto, no tanto. Por lo tanto, use algoritmos STL, escriba sus propios functores y luego conviértalos en expresiones en línea usando boost :: lambda.

Desde un punto de vista profesional, creo que la mejor manera de comenzar con boost :: lambda es entender y aceptar el uso de boost :: bind. El uso de marcadores de posición en una expresión boost :: bind se ve mucho menos mágico que & Quot; naked & Quot; boost :: marcadores de posición lambda y encuentra una aceptación más fácil durante las revisiones de código. Ir más allá del impulso básico :: es muy probable que el uso de lambda le cause dolor a sus compañeros de trabajo a menos que esté en una tienda de C ++ de vanguardia.

Trate de no ir por la borda: hay momentos cuando y lugares donde for - loop realmente es la solución correcta.

Otros consejos

Depende. ¿Ya conoce bien los conceptos de programación funcional? Si no, le sugiero que comience en un lenguaje diseñado para la programación funcional en lugar de un lenguaje de procedimiento con características funcionales grapadas. Si no está acostumbrado a codificar en un estilo funcional (no es más difícil necesariamente, pero definitivamente es diferente), entonces pasará más tiempo luchando contra la sintaxis y no suficiente tiempo aprendiendo a hacer las cosas .

En cuanto a por dónde empezar, me corté los dientes funcionales en Scheme, pero hay muchas buenas opciones.

Si está trabajando con un compilador razonablemente reciente, puede usar boost. Si aún no está en su máquina, instálela (sudo apt-get install libboost-dev en unbuntu, obtenga los binarios de boost.org si está en Windows). Lea los doc y luego mire sus documentos existentes. código para situaciones en las que podría usarlos. ¿Tiene mucha duplicación de código que podría eliminarse si parametriza una función con un pequeño fragmento de código, por ejemplo?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top