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