Pregunta

Últimamente me he entusiasmado mucho con el soporte para lambdas en VC2010. Poco a poco estoy empezando a comprender todo el potencial que tiene esta característica para transformar C ++ en algo mucho mejor.

Pero luego me di cuenta de que este potencial depende en gran medida del soporte de transmisión principal de lambdas en las bibliotecas diarias como boost y QT.
¿Alguien sabe si hay planes para ampliar estas bibliotecas con las nuevas características de C ++ 0x?

lambdas prácticamente reemplaza la necesidad de boost :: lambda y todo en boost que interactúa con él. QT podría agregar soporte para lambdas en todos sus contenedores y tal vez incluso como una forma alternativa de definir SLOT s

¿Fue útil?

Solución

Lambdas ya encaja muy bien en las bibliotecas existentes, en cualquier lugar donde una función acepta un objeto de función de un tipo dado por un parámetro de plantilla.

Esta es una de las mejores cosas de ellos: son un ejemplo clásico de una función de lenguaje que codifica la práctica existente en una sintaxis ingeniosa.

Obviamente, la biblioteca lambda boost se vuelve redundante, pero eso significa que no requiere que se agreguen nuevas características.

Otros consejos

No veo cómo el uso de lambda depende del soporte de las bibliotecas. Lambdas elimina la necesidad de crear muchas clases solo para envolver diferentes algoritmos pequeños y encajar perfectamente con otras características de lenguaje / biblioteca ( std :: function me viene a la mente). Dondequiera que solía pasar un objeto de función o un puntero de función, también se pueden usar lambdas.

Por lo tanto, principalmente agregan otra alternativa para hacer uso del código y las bibliotecas existentes. La única forma en que puedo ver que las bibliotecas admiten mejor lambda es usar enfoques de estilo más funcional.

Lo más probable es que tales bibliotecas esperen hasta que haya un soporte de compilador adecuado para las características relevantes de C ++ 0x, y no se molesten mucho hasta que los compiladores principales lo admitan. No contengas la respiración.

Esto NO es cierto, no puede reemplazar boost :: lambda con C ++ 0x lambda. Vea aquí para algunos razones (sobre el enlace de impulso, pero creo que la mayoría se transfiere)

Además, @daniel esto podría ayudarlo a comenzar a usar las funciones lambda / boost bind para las ranuras. Hace que mi vida sea increíblemente fácil.

Además, @litb de mis fuentes, las lambdas no se van a cambiar (argh)

La mayoría de las bibliotecas utilizan punteros de función estándar para devoluciones de llamada. lambdas 0x C ++ se pueden utilizar como punteros de función, por lo que la mayoría de las bibliotecas no tendrían que ser modificados. Otras bibliotecas utilizan plantillas para que puedan tomar cualquier objeto invocable (por ejemplo, std :: foreach no tendría que ser modificado).

La única otra característica de C ++ 0x que puedo pensar en que las bibliotecas podrían cambiar a está utilizando inflexible de tipos enumeraciones . Además, las bibliotecas podrían empezar a usar externo plantillas para reducir los tiempos de compilación.

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