コード単位を含めることを避ける方法としてのC ++仮想キーワード
-
08-10-2019 - |
質問
現在、TCP/IP、UDP/IP、USBなどのコアへの通信フォームを提供するサービスプラグインを許可するコードがあります...これらのサービスプラグインフィードバックNotifierクラスインスタンスは、さらに処理するためにコアにフィードバックします。
現在の実装では、サービスプロジェクト(DlopenとFriendsを介してCoreが実行時に持ち込んだ別の動的にリンクされたライブラリです)は、コアソースコード(個別のプロジェクト)にあるNotifier.cppファイルに対してコンパイルされます。これにより、Notifiersメソッドの実装にアクセスできます。これは完全に機能しません。
2つの代替オプション:1。notifierメソッドの実装をヘッダーファイルに配置します。 2. notifierメソッドを仮想と遅延バインディングを実行時に宣言します。
計算オーバーヘッドの問題を回避するオプション2の影響は何ですか?
私たちが利用できる他のオプションはありますか?
ありがとう
解決
はい、純粋な仮想関数を使用したインターフェイスを消費者に公開することは、Windows DLLからC ++オブジェクトを公開する標準的な方法です。クライアントは、実装の詳細を認識していません。メンバー変数、メンバー関数本体なし、仮想レイアウトのみ。
(参照カウントと言語と存在するバージョンを追加します dynamic_cast
, 、これを呼び出します QueryInterface
, 、そしてあなたはcomを持っています、それはWindowsに広まっています)
この手法は、 *nix共有ライブラリでもうまく機能します。
所属していません StackOverflow