dll/共有オブジェクトで配布されるC++ライブラリのAPIを設計しています。ライブラリには、仮想関数を備えたポリモーリッククラスが含まれています。これらの仮想関数をDLLAPIで公開すると、以前のバージョンのライブラリ用に構築されたアプリケーションとのバイナリ互換性を損なうことなく、同じクラスをより多くの仮想関数で拡張できる可能性がなくなるのではないかと心配しています。
1つのオプションは、PImplイディオムを使用して仮想関数を持つすべてのクラスを非表示にすることですが、これにも制限があるようです。このように、アプリケーションはライブラリのクラスをサブクラス化し、仮想メソッドをオーバーライドする可能性を失います。
後方バイナリ互換性を維持しながら、新しいバージョンのdllで(抽象ではない)仮想メソッドを使用してAPIを拡張する可能性を失うことなく、アプリケーションでサブクラス化できるAPIクラスをどのように設計しますか?
更新:ライブラリのターゲットプラットフォームは、windows/msvcおよびlinux/gccです。