Question

L'ABI de la vue d'une classe reste-t-il stable même si d'autres changements, impliquant des virtuels, sont-ils faits dans la classe dérivée?

C'est-à-dire dire que j'ai une interface InterfaceA (classe abstraite avec de nombreuses fonctions virtuelles pures) et une classe DerivedB Cela en hérite. J'écris une bibliothèque qui a une fonction prenant un InterfaceA *. Ce que je veux savoir, c'est si l'interface reste compatible binaire tant que l'interface elle-même ne change pas.

Clear, si je modifie InterfaceA Je ne m'attends pas à ce que le code soit compatible binaire. Cependant, et si je modifie juste DerivedB, disons que j'hérite plus d'interfaces ou ajoute d'autres fonctions virtuelles. Dans le plus extrême, dire que je multipliez l'héritage d'une autre classe qui définit InterfaceA. Fait InterfaceA Rester binaire compatible malgré tous ces changements?

Mon hypothèse et mon expérience, pour maintenant, c'est que oui, c'est compatible. Je cherche juste une confirmation de cette (ou de la réfutation sinon compatible).

Remarque: je ne me soucie pas du typage dynamique ou d'une autre casting, je me soucie seulement des fonctions d'interface elles-mêmes.

Remarquez également: Supposons que les versions du compilateur utilisées sont stables ABI en ensemble - aucune version majeure ne change.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top