Как разработать C ++ API для двоичной совместимости расширяемости

Я разрабатываю API для библиотеки C ++, которая будет распространяться в объекте dll / shared. Библиотека содержит полиморические классы с виртуальными функциями. Я обеспокоен тем, что если я представлю эти виртуальные функции в API-интерфейсе DLL, я откажусь от возможности расширения тех же классов с помощью большего количества виртуальных функций без нарушения бинарной совместимости с приложениями, созданными для предыдущей версии библиотеки.

Одним из вариантов будет использованиеPimpl идиома, чтобы скрыть все классы, имеющие виртуальные функции, но, похоже, они тоже естьОграничения: в этом случае приложения теряют возможность создавать подклассы классов библиотеки и переопределять виртуальные методы.

Как бы вы разработали класс API, который можно разделить на подклассы в приложении, не теряя возможности расширять API с помощью (не абстрактных) виртуальных методов в новой версии DLL, оставаясь при этом обратно совместимым с двоичным кодом?

Обновление: целевыми платформами для библиотеки являются windows / msvc и linux / gcc.

Ответы на вопрос(5)

Ваш ответ на вопрос