役に立ちましたか?

解決

はい、複数のVテーブル、各継承インタフェースのための1つが存在します。 static_cast <>はそれを返します。コンパイラは、同じ関数へのポインタと各Vテーブルのスロットを埋め、継承されたインターフェイスで一般的な方法は、共有されていることを確認します。だから、あなただけのAddRef、リリース、QueryInterfaceをの一実装を必要としています。ちょうどあなたが何をしたいです。これのどれも偶然ではない。

同じ方法で、

これが唯一のこれまで問題となっているときコクラス実装し、複数のインタフェースますは同じ実装を与えたくないということ。でIConnectionPoint ::アドバイス()メソッドは、悪名高い例です。それとも、)(DAdviseでしたか?残念ながら、私はそれはと衝突し、それが解決されたか、それはATLの内部で覆われていたものを覚えていません。非常に良い本ところでます。

他のヒント

thisポインタを与えられた場合、多重継承の

は、複数のvtableは、次の形式のような順序で配置されている(最初のバイトにその時点、01)

[01] [02] [03] [04] [05] [06] [07] [08] [09] [10] [11] [12]
【VTableAのPTR] [VTableBのPTR] [VTableCのPTR]

1つのだけ実装

はC ++は、複数のインタフェースシナリオで関数プロトタイプごとに生成されます。 しかし、通常の継承のシナリオのために、スーパークラスが事前に定義されている場合があります機能をオーバーライドする実装と子供たちは、親とは別のコンテンツを指す自分のvtableを持つことになります。

scroll top