Je suis en train de concevoir une API pour une bibliothèque C++ qui sera distribuée dans un objet DLL/partagé. La bibliothèque contient des classes polymoriques avec des fonctions virtuelles. Je crains que si j'expose ces fonctions virtuelles sur l'API DLL, je me suis coupé de la possibilité d'étendre les mêmes classes avec plus de fonctions virtuelles sans rompre la compatibilité binaire avec les applications construites pour la version précédente de la bibliothèque. Une option consisterait à utiliser l'idiome PImpl pour masquer toutes les classes ayant des fonctions virtuelles, mais qui semblent également avoir ses limites: les applications perdent ainsi la possibilité de sous-classer les classes de la bibliothèque et de surcharger les méthodes virtuelles.Comment concevoir une API C++ pour une extensibilité compatible binaire
Comment concevez-vous une classe API qui peut être sous-classée dans une application, sans perdre la possibilité d'étendre l'API avec des méthodes virtuelles (non abstraites) dans une nouvelle version de la DLL tout en restant binaire rétrograde? Mise à jour: les plates-formes cibles de la bibliothèque sont windows/msvc et linux/gcc.
L'hôte du fichier PDF que vous avez posté semble avoir été fait. Pourriez-vous le rediffuser, s'il vous plaît? –
@ MichałGórny il semble être de retour sur, mais je l'ai réhosté [ici] (http://static.coldattic.info/restricted/science/syrcose09/cppbincomp.pdf) juste au cas où. –