C ++ Наследование через предупреждение о доминировании - PullRequest
40 голосов
/ 28 июля 2011

Я пытаюсь реализовать довольно большой объект, который реализует множество интерфейсов.Некоторые из этих интерфейсов являются чисто виртуальными.У меня могут быть проблемы с наследованием бриллиантов.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 является большой на чертеже, gge::graphics::ImageTexture это D, drawin является одним из шести методов, для которых я получаю предупреждение.

1 Ответ

23 голосов
/ 28 июля 2011

Все абсолютно верно. Компилятору разрешено предупреждать о допустимом коде, здесь нет проблем. Вы можете попробовать отключить предупреждение с помощью объявления using. Если это не работает (возможно, из-за ошибки MSVC), отключите его с помощью pragma.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...