是否有人知道任何使用使用编译时技术实现的设计模式的库,例如模板元编程?我知道Loki实现了一些,但我需要找到其他库。
答案 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中你有迭代器和适配器,虽然我很确定它们不算数 由于是编译时间?
原始规范有些模糊。
确保不要将通用编程(基于模板的实现)与其他编译时技术混淆。
任何人都知道上述问题意味着什么?