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

为什么在这种情况下使用 virtual 更有效?

4

1 回答 1

1

由于Loki's 的目标似乎主要是教育性的,我想说为了清楚起见,可能已经避免了静态多态性。在教授抽象工厂等设计模式时,类之间的关系是最重要的方面。在这种情况下,如何实现多态性似乎是次要的、与实现相关的问题。

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

你可能会争辩说,如果你经常创建大对象,你会从使用静态多态中受益。这是非常正确的,但我认为 Loki 不适合在这种情况下使用。它的主要目的是教学。

查看Boost.Factory的源代码,这可能会有所帮助。其实我宁愿从Boost源代码中学习现代C++;诚然,据说 Loki 为 Boost 奠定了基础,但请记住,Boost 已经获得了更多的使用,因此受到了更多的审查和批评。

于 2012-02-25T20:36:18.270 回答