为啥 AbstractFactoryUnit 具有动态而不是静态多态性?

Posted

技术标签:

【中文标题】为啥 AbstractFactoryUnit 具有动态而不是静态多态性?【英文标题】:why AbstractFactoryUnit has dynamic instead of static polymorphism?为什么 AbstractFactoryUnit 具有动态而不是静态多态性? 【发布时间】:2012-03-15 20:38:09 【问题描述】:

我目前正在学习现代 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 更有效?

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

以上是关于为啥 AbstractFactoryUnit 具有动态而不是静态多态性?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 C# 可以重载具有相同参数的两个方法,只要其中一个具有默认参数?

为啥实例变量在闭包内具有不同的值?

为啥具有相同值的变量在 Python 中具有公共 ID? [复制]

具有多个 CollectionViewLayout 的单个 UICollectionView。为啥布局混乱?

为啥有些包含守卫具有定义的值?

为啥具有负索引的数组有效? [复制]