私は、C++でプラグインパターンを実装するために、明示的なリンク(共有ライブラリをロードするにはdlopen
)で共有ライブラリを使用しています。コンストラクタへの関数ポインタを定義することは可能ですか?
共有ライブラリで定義されたクラスのコンストラクタへの関数ポインタを定義することは可能ですか?共有ライブラリからクラスのオブジェクトをインスタンス化(および初期化)するファクトリメソッドを共有ライブラリ内に定義する必要があります?もちろん私の主なアプリケーションでは、ファクトリメソッドへの関数ポインタを定義し、そのメソッドは必要なクラスのインスタンスを返します。質問へ
乾杯
Windowsでは、__declspec(dllexport/dllimport)を使用してコンストラクタ(実際にはクラス全体)をエクスポートおよびインポートできます。あなたのコンパイラが何か類似しているかどうかを確認するコンパイラのドキュメントをチェックする価値があります。 – Puppy
Linuxでは、デフォルトですべてがエクスポートされ、必要なものだけにリンクすることができます。しかし、彼は明示的なリンク(WinAPIでLoadLibrary/GetProcAddressを考えてください)を使用しています。正直なところ、このような場合にコンストラクタをどのように処理するかはわかりません。それは良い質問です。 –