在看C++元编程时, 发现基本上都举的这么一个例子:
#include <iostream>
using namespace std;
template <int N>
struct Factorial
{
enum T{ value = N * Factorial<N - 1>::value };
};
template <>
struct Factorial<0>
{
enum { value = 1 };
};
int main()
{
cout<<Factorial<5>::value<<endl;
}
我想,能否用其它类型替换enum,我发现static const int是可以代替enum的
#include <iostream>
using namespace std;
template <int N>
struct Factorial
{
static const int value = N * Factorial<N - 1>::value;
};
template <>
struct Factorial<0>
{
static const int value = 1;
};
int main()
{
cout<<Factorial<5>::value<<endl;
}
通过上面2个例子,可以发现不用任何操作,在执行期间可以直接输出value的结构,这是因为在编译期间,value的值已经被计算出来;这也是元编程的本质:在程序编