C++模板元编程的两个例子
C++模板元编程,是使用template进行编译期运算的一种机制,可以认为是C++的一种编程方式。其实也是根据编译期能确定的值,来进行编译期的选择。
第一个例子:计算整数N的阶乘。
- //模板的一般形式
- template<int N>
- class Factorial
- {
- public:
- enum
- {
- _result = N * Factorial<N-1>::_result
- };
- };
- //用于结束递归规则的特化模板
- template<>
- class Factorial<0>
- {
- public:
- enum
- {
- _result = 1
- };
- };
- int main()
- {
- const int Num = 10;
- cout << Num << "! = " << Factorial<Num>::_result << endl;
- }
运行结果:10! = 3628800
其中的思考方式,我感觉是数学归纳法的应用。注意模板在其中起的作用,在编译期,编译器使用template生成了class Factorial<0>……class Factorial<10>一共11个class定义,在程序运行时其实计算过程并没有占用CPU时间,只不过这么多class的定义占用了一些内存。第二个例子:编译期的if语句
这是 Bjarne Stroustrup在《Evolving a language in and for the real world C++ 1991-2006》一文中举的例子。
- struct T_Left
- {
- int value;
- };
- struct T_Right
- {
- char value;
- };
- template<bool b, class X, class Y>
- struct if_
- {
- typedef X type; // use X if b is true
- };
- template<class X, class Y>
- struct if_<false, X, Y>
- {
- typedef Y type; // use Y if b is false
- };
- int main()
- {
- cout << "Type Size = " << sizeof(if_<sizeof(T_Left) < 4, T_Left, T_Right>::type) << endl;
- }
模板元编程的应用包括:Blitz++库;boost::mpl库;以及《Modern C++ Design》一书中提到的typelist。
相关推荐
IT之家 2020-03-11
graseed 2020-10-28
zbkyumlei 2020-10-12
SXIAOYI 2020-09-16
jinhao 2020-09-07
impress 2020-08-26
liuqipao 2020-07-07
淡风wisdon大大 2020-06-06
yoohsummer 2020-06-01
chenjia00 2020-05-29
baike 2020-05-19
扭来不叫牛奶 2020-05-08
hxmilyy 2020-05-11
黎豆子 2020-05-07
xiongweiwei00 2020-04-29
Cypress 2020-04-25
冰蝶 2020-04-20