【问题标题】:Policy based design in a real world open source project [closed]现实世界开源项目中基于策略的设计[关闭]
【发布时间】:2013-03-29 08:11:11
【问题描述】:

谁能指出一个开源 C++ 项目(最好不是 lib),其中广泛使用基于策略的设计?

【问题讨论】:

  • 注意:策略在设计模式中也称为策略。两者或多或少可以互换使用。
  • @MatthieuM。不同的是,PBD 只是编译时间。
  • @jotep:为 Alexandrescu;但我已经看到 Strategy 被用于编译时参数化,我不敢打赌 Policy 没有被用于运行时多态机制......
  • @MatthieuM。好吧,我只通过模板熟悉 PBD,这使得它几乎只在编译时。
  • @jotep:是的,当然,但是请注意,在对象内部注入(可能是有状态的)行为的依赖注入可能依赖于编译时或运行时多态性。它们(通常)分别被称为基于策略的设计和策略模式,但由于它们早在命名之前就已经存在......名称不一定会保留。

标签: c++ open-source policy-based-design


【解决方案1】:

好吧,我想任何使用 STL 容器(由分配器,有时是比较器参数化)的 C++ 应用程序都广泛使用基于策略的设计。它是 STL 的基石,甚至在 SGI 看到了曙光。

【讨论】:

  • 是的,这是真的。我只是试着想出一个很好的例子来与学生一起学习。
  • @Shamdor:嗯,我认为std::setstd::mapComparator 示例是一个很好的示例。它无处不在且易于理解。
【解决方案2】:

Alexandrescu 最明显的一个:Loki

它正在积极开发中。

【讨论】:

  • 嗯,这是一个库。我更多地考虑应用程序。无论如何,谢谢!
  • 库比使用它们的标准应用程序更难设计。如果你问我,基于策略的设计仅在 API 设计中才有意义。记住 Joshua Bloch,“如果你编程,你就是 API 设计师。”
【解决方案3】:

任何使用 boost 的项目 :-) http://www.boost.org/community/generic_programming.html#policy

如果您的意思是启动基于策略的对象,那么将有很多项目使用 boost。例如,http://programmingexamples.net/wiki/CPP/Boost/BGL/DijkstraDirected 或者你可以看看github上的大项目https://github.com/search?q=%23include+%3Cboost%2Fgraph%2Fgraph_traits.hpp%3E&type=Code&ref=searchresults

如果您的意思是定义基于策略的对象,那么大多数用例将是库。这样做的原因是,如果某些东西需要大量定制并且可以泛化,它就会变成一个库(即使是供内部使用)。如果您只是编写一个不需要自定义对象和多态的简单程序,那么它就不会使用太多基于策略的设计。 对于那些,你也可以在 github 上搜索,尝试一些常见的基于策略的语法。

在我的科学工作中,我使用了 boost 的依赖于策略的 odeint 库。当我编写代码时,我从一个专门的 hamiltonian 开始,然后用策略对其进行概括,它基本上成为我在许多其他项目中使用的库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多