Я пытаюсь реализовать довольно большой объект, который реализует множество интерфейсов. Некоторые из этих интерфейсов являются чисто виртуальными. У меня может возникнуть проблема в наследовании алмазов. Visual Studio сообщает о предупреждении C4250 ('class1' : inherits 'class2::member' via dominance)
. Прежде всего эти классы наследуются практически так, как должно быть. Ниже приведена конструкция частичного класса, которая вызывает эту проблему.C++ Наследование через предупреждение о доминировании
A B C
\ /\ /
\ / \ /
AB BC
| |
| BC2
| |
\ D: Implementation of B, C, BC, BC2
\ /
Big
Во всем этом дереве только D реализует виртуальные методы, нет другого определения рассматриваемого метода. И все виртуальные методы B перечислены в предупреждениях. Если это важно, D - полный класс.
Я прочитал это с сериализации Boost, и это безопасно игнорировать предупреждение.
Является ли этот метод, который я пытаюсь достичь? Можно ли игнорировать это предупреждение?
Примечание 1: Это не дубликат Visual Studio Compiler warning C4250 ('class1' : inherits 'class2::member' via dominance), я пробовал предлагаемое решение.
Примечание 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 является одним из шести методов я получаю предупреждение для.
Реализация многих интерфейсов - признак того, что ваш класс может нести слишком большую ответственность. Рассмотрим рефакторинг его на несколько меньших классов. – hammar
@hammar: Я пробовал, но проблема не в классе, Big - это просто изображение, но есть много интерфейсов для поддержки разных графических типов. Функции, требующие услуг определенного интерфейса, должны использовать наименьший интерфейс, который удовлетворяет их потребности. В качестве образца, используя эти свойства, я могу заменить систему частиц как указатель мыши. Короче говоря, я не мог разбить на более мелкие классы. –
Рассмотрите образец украшения (http://en.wikipedia.org/wiki/Decorator_pattern) в качестве альтернативы подклассу. –