元编程
什么是元编程(metaprogramming)
为什么可以进行元编程?
为什么需要元编程?
元编程的缺点
元编程可以做什么?
注:对于系统编程而言,意义不明显;
//Fibonacci数列 #include <iostream> //类模板,计算Fibonacci数列的第i项 template<int i = 1> class Fibonacci { public: enum{value = Fibonacci<i-1>::value + Fibonacci<i-2>::value}; }; //类模板特化,递归终止条件 template<> class Fibonacci<2> {public:enum{value = 1}; }; template<> class Fibonacci<1> {public:enum{value = 1}; }; int main() { std::cout << "Fib(" << 1 << ")=" << Fibonacci<1>::value << std::endl; std::cout << "Fib(" << 2 << ")=" << Fibonacci<2>::value << std::endl; std::cout << "Fib(" << 3 << ")=" << Fibonacci<3>::value << std::endl; std::cout << "Fib(" << 4 << ")=" << Fibonacci<4>::value << std::endl; return 0; }
例子2:素数枚举
#include <iostream> #include <iomanip> //递归计算p是否为素数;若是,素数判定结论answer为1,否则为0 template<int p, int i> struct PrimeMagicCube { enum{answer = p%i && PrimeMagicCube<p,i-1>::answer}; }; //素数魔方类模板部分特化,递归终止条件,除数为1,没有找到因子 template<int p>struct PrimeMagicCube<p,1> { enum{answer = 1}; }; //数值类模板,输出不大于i的全部素数 template<int i> struct Number { Number<i - 1> a;//递归定义数值对象 enum {answer = PrimeMagicCube<i,i-1>::answer}; void IsPrime() { //先降序输出全部素数,后升序输出全部数值素性序列 if (answer) std::cout << std::setw(4) << std::right << i; a.IsPrime();//递归调用,计算下一数值的素性 std::cout << std::setw(2) << answer; } }; //数值类模板特化,终止于2 template<> struct Number<2> { enum{answer = 1}; void IsPrime() { std::cout << std::setw(4) << std::right << 2 << std::endl; std::cout << std::setw(2) << answer; } }; int main() { Number<100> a;//输出100内的所有素数 a.IsPrime(); std::cout << std::endl; }
原文:http://www.cnblogs.com/hujianglang/p/6262016.html