Estoy buscando un buen recurso para aprender sobre un buen diseño de API para bibliotecas de C ++, mirar objetos / dlls compartidos, etc. Hay muchos recursos para escribir buenas API, buenas clases, plantillas, etc. a nivel fuente, pero casi nada sobre poner cosas juntas en libs y ejecutables compartidos. Libros como el diseño de software C ++ a gran escala de John Lakos son interesantes pero están enormemente desactualizados.
Lo que estoy buscando es un consejo, es decir, sobre el manejo de plantillas. Con las plantillas en mi API, a menudo termino con el código de la biblioteca en mi ejecutable (u otra biblioteca), por lo que si soluciono un error allí, simplemente no puedo implementar la nueva biblioteca, sino que tengo que volver a compilar y redistribuir todos los clientes de ese código. (y sí, conozco algunas soluciones como tratar de crear instancias de al menos las versiones más comunes dentro de la biblioteca, etc.)
También estoy buscando otras advertencias y cosas para tener en cuenta para mantener la compatibilidad binaria mientras trabajo en bibliotecas C ++.
¿Hay un buen sitio web o libro sobre tales cosas?
fuente
std::unique_ptr
Es algo bastante nuevo. ¿Qué crees que era más adecuado para tu API propuesta? ¿La forma en que tenía que administrar manualmente todos los recursos, garantizando virtualmente fugas y eliminaciones dobles, por ejemplo? ¿O la forma en que muchos de sus tipos tenían nombres de una o dos letras, haciendo imposible adivinar su propósito?unique_ptr
, no sería posible escribir código como ese.Respuestas:
De hecho, hay un libro que es precisamente lo que buscas. Se llama, apropiadamente, Diseño de API para C ++. El sitio web del libro tiene el código fuente del libro y también la errata .
fuente
Esto es casi imposible. El hecho simple es que a veces, necesitas el compilador para hacer un trabajo, y no puedes simplemente eliminar esa necesidad. No hay ninguna función que pueda hacer que
std::vector
no sea una biblioteca de solo encabezado. El compilador puede hacer que muchas magias funcionen, pero no puedes tenerlas sin invocarlas, y eso es una realidad.Esto es lo que puede hacer: no use plantillas donde no las necesite. Esto es lo que no puedes hacer: cualquier otra cosa.
El hecho simple es que recompilar con la nueva versión realmente no es una carga tan grande en comparación con las ventajas de rendimiento, seguridad y funcionalidad que puede obtener con las bibliotecas estáticamente tipadas.
fuente