1

現在、コアへの通信形式を提供するサービスプラグイン(tcp / ip、udp / ip、usbなど)を許可する一連のコードがあります。これらのサービスプラグインは、通知クラスインスタンスをコアにフィードバックしてさらに処理します。

現在の実装では、サービスプロジェクト(実行時にdlopenとその仲間を介してコアによって持ち込まれる別個のダイナミックリンクライブラリ)は、コアソースコード(別個のプロジェクト)にあるnotifier.cppファイルに対してコンパイルされます。これにより、notifiersメソッドの実装にアクセスできます。これは完全に不満なしで動作します。

2つの代替オプション:1。notifierメソッドの実装をヘッダーファイルに配置します。2.通知メソッドを仮想として宣言し、実行時までバインディングを遅らせます。

計算オーバーヘッドの問題を回避するオプション2の影響は何ですか?

他に利用できるオプションはありますか?

ありがとう

4

1 に答える 1

2

はい、純粋仮想関数を含むインターフェイスを消費者に公開することは、Windows DLL から C++ オブジェクトを公開する標準的な方法です。クライアントは実装の詳細を認識しません。メンバー変数、メンバー関数本体、仮想レイアウトのみです。

(参照カウントと、言語に依存しないバージョンの を追加しdynamic_castます。これを と呼びますQueryInterface。Windows に普及している COM があります)

この手法は、*nix 共有ライブラリでも問題なく機能します。

于 2011-01-08T01:20:19.397 に答える