阶乘元编程

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 中的静态成员)

第一个代码,需要实例化一个对象,并在 运行 时间进行计算。

因为元编程是用代码生成代码,编译完成后生成代码是没有用的,因为那个代码即使生成了也无法编译。因此,所有元编程仅在编译时发生。第一个程序不是元编程。