2010-06-26 16 views
12

He estado leyendo el libro de Alexandrescu, el diseño Modern C++, y me han impresionado las técnicas que usa, así que quería agregar Loki library a mi aplicación.C++: ¿ESTÁ USANDO Loki o Boost para funtores?

Sin embargo, después de una investigación adicional, vi ese impulso, que ya estoy usando, ofrece una gran cantidad de funcionalidad similar (no todo, sin embargo, no pude encontrar un producto único en el impulso, por ejemplo)

I estaba más interesado en usar loki debido al diseño basado en políticas y los funtores.

Para mí, boost y loki tienen pros y contras. La principal preocupación que tengo con loki es la documentación deficiente (la biblioteca ya no está vinculada al libro) pero me parece que loki es más poderosa y flexible que impulsar en algunas áreas (podría estar equivocado en eso)

Antes de elegir usar boost o loki para funtores y políticas, me gustaría conocer la opinión de las personas que los usan en la vida real.

A veces las cosas se ven muy bien en el papel pero tiene algunos inconvenientes cuando se utilizan de verdad :)

+4

No tener un singleton es una de las mejores cosas de Boost. Lo último que necesita el mundo es fomentar el uso de * más * singletons. – jalf

Respuesta

4

Estoy usando Boost en todo mi entorno C++ como una extensión de la Biblioteca estándar (con VC9 y VC10).

No lo uso en todos los proyectos.

Lo uso en proyectos personales (principalmente juegos) donde obtuve el control total de las dependencias.

Estoy usando la función boost :: en un proyecto de gran juego (con varias otras bibliotecas de boost).

Loki también es bueno pero no sentí la necesidad. Creo que la única parte de la biblioteca que estoy pensando usar es Singleton pero estoy usando una personalizada que está bien por el momento.

2

C++ 0x es lo que estoy usando para objetos de función rápida.

+2

por favor corrígeme si me equivoco, pero C++ 0x no es totalmente compatible ni con gcc ni con visual studio 2008, ¿o sí? – Dinaiz

+2

Bueno, claramente le preguntó a Loki o Boost. – fingerprint211b

+0

@Dinaiz: puede obtener la última versión de GCC, que tiene MUCHO C++ 0x, incluidas lambdas, creo. VS2008 no tiene ninguno, pero no especificó compiladores en su pregunta. – Puppy

5

Una cosa que tal vez tenga en cuenta es que las bibliotecas de impulso deben pasar por un proceso de revisión por pares durante la aceptación. Después de eso, por supuesto, creo que hay muy poca supervisión sobre los cambios, pero al menos hay alguna revisión antes de que sean aceptados. Loki es solo la visión de un hombre. Por supuesto, Alexandrescu es bastante bueno, pero aun así ... son todas sus ideas y no hay más comentarios que eso.

12

Alexandrescu tenía ideas muy interesantes (listas de tipos, plantillas de clases basadas en políticas, etc.) pero muchas de ellas se han mejorado en potencia y se han probado en una amplia gama de compiladores para la portabilidad y corrección.

Recomiendo impulsar siempre que sea posible simplemente por estas razones. Dicho esto, Modern C++ Design aún proporciona una gran cantidad de información sobre la flexibilidad de C++ y una mirada a la mente de una persona (una muy buena) para abordar una gran cantidad de problemas de programación comunes.

Por ejemplo, punteros inteligentes basados ​​en políticas son una idea muy ordenada, pero podemos encontrar por qué los autores impulsar decidieron no aplicar shared_ptr y scoped_ptr esta manera:

A. parametrización desalienta a los usuarios. La plantilla shared_ptr es cuidadosamente diseñada para satisfacer las necesidades comunes sin la parametrización extensa .Algún día se puede inventar un puntero inteligente altamente configurable que también es muy fácil de usar y muy difícil de usar. Hasta , shared_ptr es el puntero inteligente de elección para una amplia gama de aplicaciones . (Punteros inteligentes Las personas interesadas en política basada deben leer moderno diseño de C++ por Andrei Alexandrescu.)

Si usted no necesita una gran variedad de punteros inteligentes y usted y su equipo se siente cómodo trabajando extensamente con parametrización plantilla, luego, un enfoque basado en políticas para implementar indicadores inteligentes podría funcionar para usted. Sin embargo, scoped_ptr y shared_ptr (junto con weak_ptr) tienden a hacer el trabajo completamente. El comportamiento combinatorio de las clases de políticas probablemente se utilice mejor para algo para lo cual existe una amplia variedad de combinaciones útiles.

Sin embargo, todavía hay algunas propuestas interesantes de Alexandrescu que el impulso no ha abordado. MOJO, por ejemplo, sigue siendo realmente útil hasta que los compiladores hagan un mejor trabajo al implementar constructores de movimiento o hasta que podamos usar referencias de valor r desde C++ 0x. También tiene algunas ideas muy interesantes sobre la implementación de asignadores de memoria.

En cuanto a la pregunta, utilizamos partes de Loki necesarias para mojo en nuestro proyecto comercial, pero principalmente aumentamos cuando es apropiado.

Cuestiones relacionadas