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的目标看起来主要是教育性的,所以我认为静态多态性可能是为了清楚起见而被避免的。在教授抽象工厂这样的设计模式时,类之间的关系是最重要的方面。在这种情况下,多态性如何实施似乎是一个次要的,与实现相关的问题。

真正的静态多态性可能更有效,但会降低代码的可读性。

你可能会争辩说,如果你要频繁地创建大对象,你会从使用静态多态性中受益。这是非常真实的,但我认为Loki并不打算用于这种情况。其主要目的是教学。

看看Boost.Factory的源代码,这可能会有所帮助。事实上,我宁愿从Boost源代码研究现代C++;不错,据说Loki已经为Boost奠定了基础,但请记住,Boost已经获得了更多的使用方式,从而更多地进行了审查和批评。

相关问题