什么是最常见的C++设计模式库?
我读过Alexandrescu的书中关于Loki库的介绍,但看起来现在它有些失效了。是否有类似的库可用?
这与函数式编程截然相反:使用函数式编程很容易为现有数据添加新函数,但要为这些函数应用于的新数据类型添加新数据类型则更加困难。在函数和类型的可扩展性方面遇到的困难被称为表达式问题。
OOP风格的多态性主要基于内部多态性:动态函数分派基于对象的类型。现代C++还使用外部多态性,其中诸如类型擦除之类的技术允许静态接口具有运行时灵活性。新的std::shared_ptr
和boost::any
或adobe::poly
类是这些技术的典型示例。
std::function
作为参数。然后std::function
从外部控制多态灵活性。这种方法可以极大地提高许多GoF模式的样板代码。
TL;DR: 经典的GoF模式是为解决OOP的缺陷而设计的。但是,OOP不再是主流的C++风格。通用编程(标准库、Boost)和OOP的结合可以更优雅地解决许多问题,使经典的设计模式不再是首选解决方案。设计模式的最初定义是一种可重复使用的方法,用于解决无法方便地封装在库中的反复出现的问题。因此,当您可以将一个模式封装在库中时,它在我看来就不再是一个模式了。例如,在C ++中,迭代器已经成为了一个非常完整的框架,因此它们已经不再是模式。
我从未尝试过使用Loki,但阅读Alexandrescu的书后,我并没有被说服认为基于库的方法对许多模式有太多的帮助。
std::iterator_traits
和std::iterator
,但也包括消费者基础设施,即符合标准库约定的迭代器也可以插入到其类别定义的所有标准库算法中。 - microtherion可能看起来有些啰嗦,但最常见的是...标准库本身!
严格来说,它不是一个“模式库”,而是一个包含了许多工具的文件夹,用于解决常见的模式实现。
请注意,您的问题没有可回答性,因为“模式”只是在各种问题中常用的概念定义。库并不提供模式,它们(可以)使用模式来提供特定问题解决方案的实现(就像任何人都可以)。
模式在抽象层次上比编码更高级别。
Loki
库已经废弃了? - Adri C.S.