2009-02-24 8 views
7

Hay muchos lugares en donde veo una clase con plantillas y no puedo evitar pensar por qué la persona que lo escribió usó plantillas.¿Por qué el impulso está tan fuertemente modelado?

Por ejemplo, la (s) clase (s) mutex. Todos los conceptos mutex se implementan como plantillas donde uno simplemente puede crear unas pocas clases base o clases abstractas con una interfaz que coincida con el concepto.

editar después de las respuestas: Pensé en el costo de las funciones virtuales, pero ¿no vale la pena revelar muy poco el rendimiento para una mejor comprensión? Quiero decir a veces (especialmente con el impulso) es realmente difícil entender el código con plantilla y descifrar los errores del compilador como resultado de un uso inadecuado de las plantillas.

+0

sería una buena pregunta para este tipo: http://stackoverflow.com/users/5597/anthony-williams (autor de boost.thread): p –

+0

La filosofía principal de la comunidad C++ es que "solo obtienes lo que usted pregunta por ". El proyecto Boost está intentando, al igual que el STL, seguir esa filosofía diseñando todas las bibliotecas usando plantillas. Sin embargo, hay un costo, como usted menciona: la comprensión a veces sufre. Si quieres una biblioteca que puedas entender más fácilmente, tal vez deberías echarle un vistazo a la biblioteca de Qt. ¡Contiene gran parte de lo que Boost hace, y más! En mi opinión, el diseño de Qt permite el desarrollo de C++ a gran escala, algo de lo que Boost carece por completo. –

Respuesta

20

Las plantillas pueden ser altamente optimizadas en tiempo de compilación, sin la necesidad de funciones virtuales. Se pueden considerar muchos trucos de plantilla como polimorfismo en tiempo de compilación. Como sabe en tiempo de compilación qué comportamientos desea, ¿por qué debería pagar una llamada de función virtual cada vez que utiliza la clase? Como beneficio adicional, una gran cantidad de código con plantillas se puede incluir fácilmente para eliminar incluso la función más básica: la sobrecarga de llamadas.

Además, las plantillas en C++ son extremadamente potentes y flexibles: se ha demostrado que son un lenguaje completo por sí mismas. Hay algunas cosas que son fáciles de hacer con plantillas que requieren mucho más trabajo con polimorfismo en tiempo de ejecución.

3

Las plantillas le permiten hacer una versión genérica de un algoritmo. Una versión genérica de un contenedor. Ya no tiene que preocuparse por los tipos y lo que produce ya no debe estar vinculado a un tipo. Boost es una colección de bibliotecas que trata de satisfacer las necesidades de una amplia variedad de personas que usan C++ en su vida cotidiana.

Cuestiones relacionadas