4

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

4

5 回答 5

6

Boost.Spirit是一个相当大的。

于 2010-05-01T13:43:21.203 回答
2

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

“解释器”模式 -> boost.ublas 和 blitz++ 都使用“表达式模板”

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

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

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

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

于 2010-05-01T14:45:05.653 回答
1

一些使用表达式模板的库:ublas、blitz、矩阵模板库、ftensor 或 Google C++ 模板矩阵以查找更多内容。

顺便说一句,ftensor 真的很漂亮http://www.gps.caltech.edu/~walter/FTensor/FTensor.pdf

于 2010-05-01T14:30:53.883 回答
0

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

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

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

还有一些库将 C++ 习语实现为 Boost.Pimpl(在审查计划中)、Scope Exit(已接受)、Memoizer。

于 2010-05-01T13:59:13.673 回答
0

almal GPG 更高级吗?

在 Loki 中实现的任何情况: - 工厂抽象 - 工厂 - 单例 - 访客 - 命令

在助推蝇量级

在 STL 中,您有迭代器和适配器,尽管我很确定它们由于是编译时而不算数?

原始规范有些模糊。

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

任何人都知道上述问题的含义是什么?

于 2010-05-23T09:26:43.037 回答