模板元编程

 1 /* 模板元编程 */
 2 
 3 // 模板元  就是把运行时消耗的时间在编译期间进行优化
 4 
 5 #include<iostream>
 6 
 7 
 8 template<int N>
 9 struct data
10 {
11     enum {res = data<N-1>::res+data<N-2>::res};
12 
13 };
14 
15 template<>
16 struct data<1>
17 {
18     enum {res = 1}
19 };
20 
21 template<>
22 struct data<2>
23 {
24     enum {res = 1}
25 };
26 
27 
28 
29 int getdata(int n)
30 {
31     if(n==1 || n==2)
32     {
33         return 1;
34     }
35     else
36     {
37         return getdata(n-1)+getdata(n-2);
38     }
39 }
40 
41 int main()
42 {
43     std::cout << getdata(30) << std::endl;
44 
45     int num = data<40>::res;
46 
47     std::cout <<num << std::endl;
48 
49     std::cin.get();
50     return 0;
51 }
52 
53 /*
54 
55 主要思想:
56 
57     利用模板特化机制实现编译期条件选择结构,
58     利用递归模板实现编译期循环结构,
59     模板元程序则由编译器在编译期解释执行。
60 
61 优劣及适用情况:
62 
63     通过将计算从运行期转移至编译期,在结果程序启动之前做尽可能多的工作,
64     最终获得速度更快的程序。也就是说模板元编程的优势在于:
65 
66         1.以编译耗时为代价换来卓越的运行期性能(一般用于为性能要求严格的数值计算换取更高的性能)。
67           通常来说,一个有意义的程序的运行次数(或服役时间)总是远远超过编译次数(或编译时间)。
68 
69         2.提供编译期类型计算,通常这才是模板元编程大放异彩的地方。
70 
71 模板元编程技术并非都是优点:
72 
73     1.代码可读性差,以类模板的方式描述算法也许有点抽象。
74 
75     2.调试困难,元程序执行于编译期,没有用于单步跟踪元程序执行的调试器
76      (用于设置断点、察看数据等)。程序员可做的只能是等待编译过程失败,
77       然后人工破译编译器倾泻到屏幕上的错误信息。
78 
79     3.编译时间长,通常带有模板元程序的程序生成的代码尺寸要比普通程序的大,
80 
81     4.可移植性较差,对于模板元编程使用的高级模板特性,不同的编译器的支持度不同。
82 
83 */

 

posted on 2015-06-02 12:14  Dragon-wuxl  阅读(165)  评论(0)    收藏  举报

导航