1、实现斐波那契数列和最大公约数在编译期的求值
#include <iostream>
using namespace std;
/*阶乘*/
template<int N>
struct Fac {
const static int value = N * Fac<N - 1>::value;
};
template<>
struct Fac<0> {
const static int value = 1;
};
/*斐波那契数列*/
template<int N>
struct Fib {
const static int value = Fib<N - 1>::value + Fib<N - 2>::value;
};
template<>
struct Fib<1> {
const static int value = 1;
};
template<>
struct Fib<2> {
const static int value = 1;
};
/*最大公约数, 递归*/
template<int a, int b>
struct Gcd {
const static int value = Gcd<b, a%b>::value;
};
template<int a> //传递双参数, 这里只模板特化了int b
struct Gcd<a, 0> {
const static int value = a;
};
int main() {
Fac<3>::value; //编译期 = 6
Fib<7>::value; //编译期 = 13
Fib<100>::value; //int上溢, 复杂度O(N)
Gcd<24, 36>::value; //12
}
2、