哪些库使用通过编译时元编程技术实现的设计模式?

时间:2010-05-01 13:41:27

标签: c++ design-patterns templates metaprogramming compile-time

是否有人知道任何使用使用编译时技术实现的设计模式的库,例如模板元编程?我知道Loki实现了一些,但我需要找到其他库。

5 个答案:

答案 0 :(得分:6)

Boost.Spirit非常重要。

答案 1 :(得分:2)

这取决于您感兴趣的设计模式。有一些像“Active Object”和Dispose,在编译时很难实现。

“翻译”模式 - > boost.ublas和blitz ++都使用“表达模板”

“桥”模式 - >每个标准容器都采用“分配器”参数(Loki的大部分也是桥接模式)

“策略”模式 - > STL模板函数根据参数类型选择最佳实现

所有这些中唯一的区别是模式的评估在编译器运行时发生,而不是在可执行文件运行时发生。所以你需要的只是稍微调整一下你的想法:模板是程序,“C ++编译器”运行并解释这个程序。该模板程序的输出是准备链接的目标文件。换句话说,当编译器运行时,模板代码的运行时是精确的。 C ++模板是一种图灵完整的函数式语言,就像lisp或XSLT一样。

事实上,1993年第一个模板元程序的输出不是可执行文件,而是一系列打印斐波那契序列的编译器错误。

答案 2 :(得分:1)

一些使用表达式模板的库:ublas,blitz,矩阵模板库,ftensor或Google C ++模板矩阵可以找到更多。

顺便说一下,ftensor非常光滑http://www.gps.caltech.edu/~walter/FTensor/FTensor.pdf

答案 3 :(得分:0)

我认为你要求的库有助于使用设计模式更多的库使用设计模式,不是吗?

Boost中有一些但不是太多,比如Flyweight - 设计模式来管理大量高度冗余的对象。

尚未发布但已接受的库Boost.Factory和被拒绝的库Boost.Singleton

还有一些库实现了C ++习语作为Boost.Pimpl(在审核时间表上),Scope Exit(已接受),Memoizer。

答案 4 :(得分:0)

Doen almal GPG hier?

任何在Loki实施的案例:   - 工厂摘要   - 工厂   - 单身人士   - 访客   - 命令

在提升重量级

在STL中你有迭代器和适配器,虽然我很确定它们不算数 由于是编译时间?

原始规范有些模糊。

确保不要将通用编程(基于模板的实现)与其他编译时技术混淆。

任何人都知道上述问题意味着什么?