模板元编程
2013-08-22 18:21
148 查看
1.定义
模板元编程(英语:Template metaprogramming;缩写:TMP)是一种元编程技术,编译器使用模板产生暂时性的源码,然后再和剩下的源码混合并编译。
这些模板的输出包括编译时期常数、数据结构以及完整的函数。如此利用模板可以被想成编译期的运行。
2.模板元编程的优缺点
编译期对运行期:因为模板的运算以及展开都是在编译期,这会花相对较长的编译时间,但能够获得更有效率的运行码。
这项编译期花费一般都很小,但对于大项目或是普遍依赖模板的程序,也许会造成很大的编译开销。
泛型程序设计::模板元编程允许程序员专注在架构上并委托编译器产生任何客户码要求的实现。因此,模板元编程可达成真正的泛用代码,促使代码缩小并较好维护。
可读性:: 对于C++来说,模板元编程的语法及语言特性比起传统的C++编程,较难以令人理解。因此对于那些在模板元编程经验不丰的程序员来说,程序可能会变的难以维护。
移植性:: 对于C++来说,由于各编译器的差异,大量依赖模板元编程(特别是最新形式的)的代码可能会有移植性的问题。
3.实例:
test程序
模板元编程(英语:Template metaprogramming;缩写:TMP)是一种元编程技术,编译器使用模板产生暂时性的源码,然后再和剩下的源码混合并编译。
这些模板的输出包括编译时期常数、数据结构以及完整的函数。如此利用模板可以被想成编译期的运行。
2.模板元编程的优缺点
编译期对运行期:因为模板的运算以及展开都是在编译期,这会花相对较长的编译时间,但能够获得更有效率的运行码。
这项编译期花费一般都很小,但对于大项目或是普遍依赖模板的程序,也许会造成很大的编译开销。
泛型程序设计::模板元编程允许程序员专注在架构上并委托编译器产生任何客户码要求的实现。因此,模板元编程可达成真正的泛用代码,促使代码缩小并较好维护。
可读性:: 对于C++来说,模板元编程的语法及语言特性比起传统的C++编程,较难以令人理解。因此对于那些在模板元编程经验不丰的程序员来说,程序可能会变的难以维护。
移植性:: 对于C++来说,由于各编译器的差异,大量依赖模板元编程(特别是最新形式的)的代码可能会有移植性的问题。
3.实例:
/* 例子1:求阶乘 */ template<int n> class Factorial { public: enum {value = n * Factorial<n-1>::value }; }; template<> class Factorial<0> { public: enum {value = 1 }; };
/* 例子2:多态的实现 */ template <class Derived> struct base { void interface() { static_cast<Derived*>(this)->implementation(); } }; struct derived1 : base<derived1> { void implementation() { cout << "in derived1" << endl; } }; struct derived2 : base<derived2> { void implementation() { cout << "in derived2" << endl; } };
test程序
#include "test.h" int main() { cout << Factorial<4>::value << endl; derived1 test1; derived2 test2; test1.interface(); test2.interface(); }
相关文章推荐
- 模板元编程----boost组件基础
- C++简单模板元编程
- 分别使用一般递归的方法和模板元编程实现台阶问题。
- 模板元编程 第三章课后练习(非答案)
- 由模板元编程看 VC 和 GCC 编译方式的不同
- Functional Programming与C++的模板元编程
- 模板元编程的循环问题
- 模板元编程-C++
- C++中模板元编程原理及速度测试
- 模板元编程-编译期计算数值
- C++之:模板元编程(三) 默认模板参数
- 从 C++ 模板元编程生产质数看 F# 函数式编程思想
- 基本的模板元编程
- 学习模板元编程1
- c++ 模板元编程的一点体会
- C++中模板元编程原理及速度测试
- C++11 模板元编程初探: 在编译期间确定斐波那契数列
- [翻译] Effective C++, 3rd Edition, Item 48: 感受 template metaprogramming(模板元编程)
- 模板元编程
- 使用模板元编程快速的得到斐波那契数。。