最常见的C++设计模式库是什么?
我在Alexandrescu的书中读到过关于Loki库的内容,但现在看起来它已经死了。外面有没有类似的东西?
发布于 2013-07-19 15:56:01
“设计模式是针对您的编程语言的错误报告”-- Peter Norvig
要回答为什么没有太多C++设计模式库的问题,了解设计模式首先要解决的问题是很有用的。经典的GoF书在前言中写道
设计模式描述了面向对象软件设计中特定问题的简单而优雅的解决方案。
90年代风格的面向对象编程在很大程度上依赖于使用抽象类作为接口,具体的实现类派生自这些接口。GoF模式描述了不同类类型的对象之间的创建、结构和行为关系。它们的关键元素是:封装和参数化任何经常改变的东西。许多GoF模式也可以使用模板重新制定,但是灵活性被限制在编译时而不是运行时。
面向对象编程使得添加接口的不同具体实现变得非常容易。OOP遇到的困难是向现有接口添加新功能。就是最好的例子:它本质上是一种变通方法,它依靠额外的间接性来允许新算法在现有数据结构上工作。
这与函数式编程正好相反:使用函数式编程很容易为现有数据添加新函数,但要添加应用此类函数的新数据类型则困难得多。在函数和类型中获得可扩展性的困难被称为。
OOP风格的多态性在很大程度上基于内部的多态性:动态函数分派是基于对象的类型。现代C++还使用外部多态性,其中类型擦除等技术允许通过静态接口实现运行时灵活性。新的std::shared_ptr和boost::any或adobe::poly类就是这些技术的主要示例。
最近的一次ACCU presentation by Tobias Darm展示了许多将旧的内部多态GoF模式转换为这种新样式的外部多态模式的示例。粗略的想法是用可以接受std::function作为参数的函数参数替换抽象类。然后,std::function从外部控制多态灵活性。许多GoF模式都可以通过这种方式在样板方面得到极大的增强。
TL;DR:经典的GoF模式是为解决OOP缺点而量身定做的。但是OOP不再是占主导地位的C++风格。泛型编程(标准库,Boost)和OOP的组合可以更好地解决许多问题,使经典设计模式不再是首选解决方案。
发布于 2013-07-17 20:56:33
设计模式的最初定义是一种可重用的方法,用于解决无法方便地封装在库中的重复出现的问题()。因此,在我看来,一旦你可以将一个模式封装到一个库中,它就不再是一个模式了。例如,这在很大程度上发生在C++中的迭代器中,因为标准C++库现在有一个全面的框架来实现迭代器。
我从来没有尝试过使用Loki,但在阅读Alexandrescu的书时,我并不相信基于库的方法真的可以为许多模式提供很多东西。
发布于 2013-07-19 03:16:25
似乎是同义反复,但最常见的是...标准库本身!
它不是-strictly所说的--一个“模式库”,而是一个文件夹,里面有许多解决通用模式实现的工具。
请注意,您的问题不是可回答的,只是一种模式,只是在各种问题中常用的概念性定义。库不提供模式,它们(可以)使用模式(像其他人一样)来提供特定问题解决方案的实现。
模式位于比编码更高的抽象层。
https://stackoverflow.com/questions/17464217
复制相似问题