多くのインターフェイスを実装するかなり大きなオブジェクトを実装しようとしています。これらのインターフェイスの一部は、純粋な仮想です。ダイヤモンドの継承に問題がある可能性があります。Visual Studio は の警告を報告していますC4250 ('class1' : inherits 'class2::member' via dominance)
。まず第一に、これらのクラスは本来あるべき姿で事実上継承されます。以下は、この問題の原因となる部分クラスの設計です。
A B C
\ / \ /
\ / \ /
AB BC
| |
| BC2
| |
\ D: Implementation of B, C, BC, BC2
\ /
Big
このツリー全体では、D のみが仮想メソッドを実装しており、問題のメソッドの他の定義はありません。また、B のすべての仮想メソッドが警告にリストされます。重要な場合、D は完全なクラスです。
これはBoostシリアライゼーションで発生することを読みましたが、警告を無視しても安全です。
私が達成しようとしているこの方法は有効ですか?この警告を無視しても安全ですか?
注 1:これはVisual Studio Compiler warning C4250 ('class1' : inherits 'class2::member' via dominance)の複製ではありません。そこで提案された解決策を試しました。
注 2:クラス図も送信できますが、これよりも少し複雑です。
編集: 完全な警告は次のとおりです。
warning C4250: 'gge::resource::ImageResource' : inherits
'gge::graphics::ImageTexture::gge::graphics::ImageTexture::drawin'
via dominance
gge::resource::ImageResource
は Big in the drawing、gge::graphics::ImageTexture
は D、drawin は、私が警告を受ける 6 つのメソッドの 1 つです。