【发布时间】:2010-12-18 23:54:14
【问题描述】:
我正在为 C++ 库设计一个 API,该库将分布在 dll / 共享对象中。该库包含具有虚函数的多态类。我担心如果我在 DLL API 上公开这些虚函数,我就不可能用更多虚函数扩展相同的类,而不会破坏与为之前版本的库构建的应用程序的二进制兼容性。
一种选择是使用PImpl 习惯用法来隐藏所有具有虚函数的类,但这似乎也有其局限性:这样应用程序就失去了继承库的类并覆盖虚方法的可能性.
您将如何设计一个可以在应用程序中进行子类化的 API 类,同时又不会失去在新版本的 dll 中使用(非抽象)虚拟方法扩展 API 的可能性,同时保持向后二进制兼容?
更新:该库的目标平台是 windows/msvc 和 linux/gcc。
【问题讨论】:
-
改用 C#。 ;-P
标签: c++ virtual binary-compatibility