C++ 優位性による継承の警告 質問する

C++ 優位性による継承の警告 質問する

多くのインターフェイスを実装するかなり大きなオブジェクトを実装しようとしています。これらのインターフェイスの一部は純粋仮想です。ダイヤモンド継承に問題がある可能性があります。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 コンパイラ警告 C4250 ('class1' : 優位性により 'class2::member' を継承します)そこで提案された解決策を試してみました。

注2:クラス図も送信できますが、これよりも少し複雑です。

編集:完全な警告は次のとおりです。

warning C4250: 'gge::resource::ImageResource' : inherits 
'gge::graphics::ImageTexture::gge::graphics::ImageTexture::drawin' 
via dominance

gge::resource::ImageResource図面では Big であり、gge::graphics::ImageTextureD であり、drawin は警告を受ける 6 つの方法の 1 つです。

ベストアンサー1

すべてが完全に有効です。コンパイラは有効なコードについて警告することが許可されていますが、ここでは問題ありません。宣言を使用して警告を黙らせることができますusing。これが機能しない場合は (おそらく MSVC のバグが原因)、 で警告を黙らせますpragma

おすすめ記事