почему у AbstractFactoryUnit есть динамический, а не статический полиморфизм? - PullRequest
1 голос
/ 25 февраля 2012

Я нахожусь в процессе изучения современного c ++ и сейчас сосредоточен на абстрактной фабрике, и из того, что я понимаю, одна из главных идей для Loki - избегать «виртуального» (динамического полиморфизма), который используется в GoF , Но иногда это все еще используется. В главе об абстрактной фабрике, AbstractFactoryUnit имеет «виртуальный». http://loki -lib.cvs.sourceforge.net / loki-lib / loki / include / loki / AbstractFactory.h? View = markup Из того, что я читал до сих пор, есть способы обойти это. http://en.wikipedia.org/wiki/Template_metaprogramming#Static_polymorphism

почему в этом случае эффективнее использовать виртуальный?

1 Ответ

1 голос
/ 26 февраля 2012

Поскольку цели Loki кажутся в основном образовательными, я бы сказал, что статического полиморфизма можно было бы избежать просто ради ясности.При обучении шаблонам проектирования, таким как абстрактная фабрика, отношения между классами являются наиболее важным аспектом.Реализация полиморфизма в этом контексте выглядит как вторичная проблема, связанная с реализацией.

Правда, статический полиморфизм может быть более эффективным, но он снижает читабельность кода.если бы вы часто создавали большие объекты, вы бы выиграли от использования статического полиморфизма.И это очень верно, но я думаю, что Локи не предназначен для использования в таком сценарии.Его основная цель - обучение.

Взгляните на исходный код Boost.Factory , который может помочь.На самом деле, я бы лучше изучил современный C ++ из исходного кода Boost;правда, Локи, как говорят, заложил основы для Boost, но имейте в виду, что Boost получил гораздо большее использование и, таким образом, пересматривал и критиковал гораздо больше.

...