1

В настоящее время я изучаю современный 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Почему AbstractFactoryUnit имеет динамический, а не статический полиморфизм?

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

ответ

1

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

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

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

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