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

Я пытаюсь реализовать довольно большой объект, реализующий множество интерфейсов. Некоторые из этих интерфейсов являются чисто виртуальными. У меня могут быть проблемы с наследованием бриллиантов. Visual Studio сообщает о предупреждении C4250 ('class1': наследует 'class2 :: member' через доминирование) . Во-первых, эти классы наследуются виртуально, как и должно быть. Ниже приводится дизайн частичного класса, который вызывает эту проблему.

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 :: ImageTexture - значение D, drawin - это один из шести методов, которые я получаю предупреждение для.

40
задан Community 23 May 2017 в 11:46
поделиться