Реализовать конкатенативное наследование в C ++ - PullRequest
0 голосов
/ 17 января 2019

Возможно ли реализовать конкатенативное наследование или хотя бы миксины в C ++?

Такое чувство, что это невозможно сделать в C ++, но я не могу это доказать.

Спасибо.

1 Ответ

0 голосов
/ 17 января 2019

Согласно этой статье :

Конкатенативное наследование - это процесс объединения свойств одного или нескольких исходных объектов в новый целевой объект.

Мы говорим о наследовании классов?

Это основной способ, которым публичное наследование работает в C ++. Благодаря множественному наследованию вы можете даже комбинировать несколько базовых классов.

Однако могут существовать некоторые ограничения (например, необходимо разрешать конфликты имен между различными источниками, в зависимости от варианта использования вам могут потребоваться виртуальные функции, а также может возникнуть необходимость явно создавать комбинированные конструкторы).

Или подразумевается наследование от созданных объектов?

Если речь идет об объектах, а не о классах, история другая. Вы не можете клонировать и комбинировать объекты случайного типа друг с другом, так как C ++ является строго типизированным языком.

Но сначала давайте исправим вводящую в заблуждение формулировку. Речь идет не о конкатенативном наследовании, поскольку наследование предназначено для классов. Это скорее «конкатенационное прототипирование», так как вы создаете новые объекты, принимая значения и поведение существующих объектов.

Чтобы реализовать какое-то «конкатенативное прототипирование» в C ++, вам необходимо спроектировать его, основываясь на принципе компоновки, используя набор хорошо определенных «конкатенируемых» (т.е. компонуемых) базовых классов. Этого можно достичь, используя шаблон проектирования прототипа вместе с архитектурой entity-component-system .

Какова цель

В настоящее время вы ищете такую ​​конструкцию, возможно, потому, что вы интенсивно ее использовали в динамически типизированном языке.

Имейте в виду популярную цитату (Марк Твен? Маслоу?):

Если у вас в руке молоток, все проблемы выглядят как гвозди

Итак, вопрос в том, что вы действительно ищете и какую проблему вы намерены решить. ИМХО, нельзя исключать, что другие идиомы могут быть более подходящими в мире C ++ для достижения той же цели.

...