Подтвердить что ты не робот

С++ Наследование через предупреждение о доминировании

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

Примечание 2: Я также могу отправить диаграмму классов, но это немного сложнее, чем это.

EDIT: Полное предупреждение:

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

gge::resource::ImageResource Большой в чертеже, gge::graphics::ImageTexture есть D, drawin - один из шести методов, о которых я предупреждаю.

4b9b3361

Ответ 1

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