Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, minorlogic, Вы писали:
VD>>>http://en.wikipedia.org/wiki/Diamond_problem
M>>Вы же прочли что эта проблема решена в С++ ? на тоже вики странице ?
VD>Это где же такое написанно?
C++ by default follows each inheritance path separately, so a D object would actually contain two separate A objects, and uses of A's members have to be properly qualified. If the inheritance from A to B and the inheritance from A to C are both marked "virtual" ("class B : virtual A"), C++ takes special care to only create one A object, and uses of A's members work correctly. If virtual inheritance and nonvirtual inheritance are mixed, there is a single virtual A and a nonvirtual A for each nonvirtual inheritance path to A.
M>>Или что то путаю , или миксины создают различную имплементацию много раз ?
VD>Миксины,точнее трэйтсы (это более продуманная реализация) не приводит к наследованию. Мы как бы просто приказываем компилятору скопировать код в наш класс и тем самым добавить в него нужную нам фукнциональность. Тоже самое конечно можно сделать просто копи-пэстом, но при этом начинается проблема копи-пэста, когда повяляются множество копий одного и того же (по сути) кода и она могут оказаться арссинхронизированными. Тут же копирование проихводится во время компиляции, что устраняет проблему рассинхронизации.
VD>К тому же трэйтсы предполагают еще и средства разруливания неоднозначностей. Так методы можно переименовывать, ипотрировать толко для реализации методов интерфейсов и замещать методами из класса в который производится импорт.
VD>Но забавно, что языки в которых есть фукнции высшего порядка зачастую вообще позволяют использоват другую технику. Лично я вообще не нуждался в МН в посление годы. Как-то привыкаешь проектировать без этго и получается даже лучше. Хотя возможно тут причаной является банальное повышение опыта.
Попробую еще раз на пальцах , при использовании миксинов , код компилируется и линкуется Многократно, виртуальное же наследование лишено этих недостатков.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>