Estoy diseñando una API para una biblioteca C++ que se distribuirá en un dll/objeto compartido. La biblioteca contiene clases polimórficas con funciones virtuales. Me preocupa que si expongo estas funciones virtuales en la DLL API, me recorte de la posibilidad de extender las mismas clases con más funciones virtuales sin romper la compatibilidad binaria con las aplicaciones creadas para la versión anterior de la biblioteca.Cómo diseñar una API C++ para la extensibilidad compatible binaria
Una opción sería utilizar el lenguaje PImpl para ocultar todas las clases que tienen funciones virtuales, sino que también parecen tener sus limitaciones: de esta manera las aplicaciones pierden la posibilidad de crear subclases de las clases de la biblioteca y sustituyendo los métodos virtuales.
¿Cómo diseñarías una clase de API que se puede subclasificar en una aplicación, sin perder la posibilidad de ampliar la API con métodos virtuales (no abstractos) en una nueva versión de la DLL mientras permaneces compatible con versiones anteriores binarias?
Actualización: las plataformas de destino para la biblioteca son windows/msvc y linux/gcc.
El host para el archivo PDF que ha publicado parece estar hecho. ¿Podrías volver a publicarlo, por favor? –
@ MichałGórny parece estar de nuevo encendido, pero lo he vuelto a crear [aquí] (http://static.coldattic.info/restricted/science/syrcose09/cppbincomp.pdf) por si acaso. –