阶乘元编程
Factorial Meta Programming
我们最近在大学上了一节关于元编程的课...
所以我开始实现我自己的阶乘元代码...这就是结果。
template<int i>
struct fak{
fak<i-1> next;
int fakul = i * next.fakul;
};
template<>
struct fak<1>{
int fakul = 1;
};
同时我们脚本的变体...
template<int i>
struct fakCool{
static const int fak = i * fakCool<i-1>::fak;
};
template<>
struct fakCool<1>{
static const int fak = 1;
};
看到脚本的结果后我的问题是...都是元编程尝试吗?如果是这样,它们之间的区别是什么?实现阶乘元的常用方法是什么?
第二个代码:-
不需要实例化对象。
它在编译时进行计算。(由于 class 中的静态成员)
第一个代码,需要实例化一个对象,并在 运行 时间进行计算。
因为元编程是用代码生成代码,编译完成后生成代码是没有用的,因为那个代码即使生成了也无法编译。因此,所有元编程仅在编译时发生。第一个程序不是元编程。
我们最近在大学上了一节关于元编程的课... 所以我开始实现我自己的阶乘元代码...这就是结果。
template<int i>
struct fak{
fak<i-1> next;
int fakul = i * next.fakul;
};
template<>
struct fak<1>{
int fakul = 1;
};
同时我们脚本的变体...
template<int i>
struct fakCool{
static const int fak = i * fakCool<i-1>::fak;
};
template<>
struct fakCool<1>{
static const int fak = 1;
};
看到脚本的结果后我的问题是...都是元编程尝试吗?如果是这样,它们之间的区别是什么?实现阶乘元的常用方法是什么?
第二个代码:-
不需要实例化对象。
它在编译时进行计算。(由于 class 中的静态成员)
第一个代码,需要实例化一个对象,并在 运行 时间进行计算。
因为元编程是用代码生成代码,编译完成后生成代码是没有用的,因为那个代码即使生成了也无法编译。因此,所有元编程仅在编译时发生。第一个程序不是元编程。