2016-10-10 9 views
0

プラグインベースのアプリケーションでは、コア/実行可能ファイルにはプラグイン(dll/so)が実装すべきいくつかの純粋仮想インタフェースクラスがあります。さらに、プラグインがアクセス可能でなければならないインタフェースの標準実装があります。メインアプリケーションからライブラリ/プラグインにクラスをエクスポートするにはどうすればいいですか?

純粋な仮想インターフェイスをまったくエクスポートする必要はありますか?とにかくコンパイル時にライブラリに含まれるヘッダファイルのみで構成されているということです。だから実行時にシンボルが必要ないはずですか?

クラスをメインアプリケーションからプラグインにエクスポートするにはどうすればよいですか?これはまったく意味がありますか?この場合のベストプラクティスは何ですか?

これは、これらのシンボルがライブラリで定義されていないことを意味します。これをどのように達成するのですか?

答えて

0

純粋仮想インターフェイスには、コンパイラがv-tableを「作成」するようにする仮想デストラクタが含まれます。

このvテーブルを1つのコンパイル単位で作成することをお勧めします。クラスのランタイムタイプ情報を使用する場合は、これが不可欠なことがあります。

プラグインの状況では、クラスが「インタフェース」基本クラスを実装していることを潜在的に「検証」する必要があります。

メインアプリケーションは、複数の方法でプラグインを追加できるようにプラグインが独自のプラグインを追加できる「モデル」にフックできます。

+0

本当にRTTIが必要です。インターフェイスをエクスポートする必要がありますか?それでも私は主なアプリケーションからそれらをエクスポートする方法を知りません。 – ManuelSchneid3r

+0

このようにすれば、インタフェースをどこかのライブラリに置いて、アプリケーションとプラグインの両方にそれらをインクルードしてリンクさせることができます。 私はあなたをhttps://github.com/dotfield/iocに誘導したいと強く誘惑されます。 – CashCow

関連する問題