виртуальное наследование с помощью конструкторов абстрактных классов - PullRequest
3 голосов
/ 15 сентября 2011

У меня возникла следующая проблема: существует абстрактный базовый класс и два других абстрактных класса, которые фактически наследуются от базового класса, и в качестве заключения необходимо вызвать его конструктор со всеми необходимыми аргументами.

Но теперь я получил «нормальный» класс, который наследует оба класса второго порядка, и поэтому должен вызывать конструктор baseclass самостоятельно (поскольку базовый класс наследуется практически от обоих классов второго порядка), нооба конструктора второго порядка принимают аргументы для передачи конструктору базового класса.

Можно ли как-то реализовать конструкторы таким образом, чтобы не было необходимости передавать эти, в этом случае неиспользуемые, аргументы?

Я надеюсь, что смог точно описать свою проблему, если будут какие-либо вопросы, я буду рад ответить на них.

1 Ответ

1 голос
/ 15 сентября 2011

НАКОНЕЦ нашел его.

§ 12.6.2 / 7 [class.base.init]

Используется список выражений или фигурный список инициализации в mem-initializer инициализировать указанный подобъект (или, в случае делегирующий конструктор, полный объект класса) в соответствии с правила инициализации 8.5 для прямой инициализации. инициализация, выполняемая каждым mem-инициализатором, составляет полное выражение. Любое выражение в mem-initializer оценивается как часть полного выражения, которая выполняет инициализацию. A mem-initializer, где mem-initializer-id обозначает виртуальную базу класс игнорируется во время выполнения конструктора любого класса, который не самый производный класс.

Итак, передайте аргументы. Они все равно будут проигнорированы. Делает вещи действительно простыми!

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