我正在学习现代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
为什么在这种情况下使用虚拟会更有效?
答案 0 :(得分:1)
由于Loki
的目标似乎主要是教育性的,我会说为了清楚起见,可能已经避免了静态多态性。在教授像抽象工厂这样的设计模式时,类之间的关系是最重要的方面。在这种情况下,多态性如何实现似乎是一个与实现相关的次要问题。
确实,静态多态可能更有效,但它会降低代码的可读性。
您可能会争辩说,如果您经常创建大对象,那么您将从使用静态多态中受益。这是非常正确的,但我认为Loki并不适合在这种情况下使用。它的主要目的是教学。
查看Boost.Factory的源代码,这可能有所帮助。实际上,我宁愿用Boost源代码学习现代C ++;事实上,据说Loki已经为Boost奠定了基础,但请记住,Boost已经获得了更多的使用方式,因此更多地进行了评论和批评。