有人知道任何使用使用编译时技术(例如模板元编程)实现的设计模式的库吗?我知道 Loki 实现了一些,但我需要找到其他库。
5 回答
Boost.Spirit是一个相当大的。
这取决于您对哪种设计模式感兴趣。有一些像“Active Object”和 Dispose 这样的设计模式在编译时很难实现。
“解释器”模式 -> boost.ublas 和 blitz++ 都使用“表达式模板”
“桥”模式 -> 每个标准容器都有一个“分配器”参数(大部分 Loki 也是桥模式)
“策略”模式 -> STL 模板函数根据参数类型选择最佳实现
所有这些的唯一区别是模式的评估发生在编译器运行时,而不是可执行文件运行时。所以你只需要稍微调整一下你的想法:模板就是程序,“C++ 编译器”运行并解释这个程序。这个模板程序的输出是一个准备好链接的目标文件。换句话说,当您的编译器运行时,您的模板代码的运行时是精确的。C++ 模板是一种图灵完备的函数式语言,就像 lisp 或 XSLT 一样。
事实上,1993 年的第一个模板元程序的输出不是可执行文件,而是一系列打印斐波那契序列或类似内容的编译器错误。
一些使用表达式模板的库:ublas、blitz、矩阵模板库、ftensor 或 Google C++ 模板矩阵以查找更多内容。
顺便说一句,ftensor 真的很漂亮http://www.gps.caltech.edu/~walter/FTensor/FTensor.pdf。
我认为您要求的库有助于使用设计模式,而不是使用设计模式的库,不是吗?
Boost 中有一些但不是太多,例如 Flyweight - 用于管理大量高度冗余对象的设计模式。
尚未发布但已接受的库 Boost.Factory 和被拒绝的库 Boost.Singleton
还有一些库将 C++ 习语实现为 Boost.Pimpl(在审查计划中)、Scope Exit(已接受)、Memoizer。
almal GPG 更高级吗?
在 Loki 中实现的任何情况: - 工厂抽象 - 工厂 - 单例 - 访客 - 命令
在助推蝇量级
在 STL 中,您有迭代器和适配器,尽管我很确定它们由于是编译时而不算数?
原始规范有些模糊。
确保不要将泛型编程(基于模板的实现)与其他编译时技术混淆。
任何人都知道上述问题的含义是什么?