了解模板元编程概念和术语

时间:2019-04-18 07:03:38

标签: c++ c++11 templates

我已经尝试了网上所有可用的资源,还无法理解模板的概念和语法。

template <int N>
struct Factorial 
{
    enum { value = N * Factorial<N - 1>::value };
};

template <>
struct Factorial<0> 
{
    enum { value = 1 };
};

// Factorial<4>::value == 24
// Factorial<0>::value == 1
void foo()
{
    int x = Factorial<4>::value; // == 24
    int y = Factorial<0>::value; // == 1
}

value相关联的Factorial<4>::value是什么 为什么我们在这里需要enumstruct Factorial<0>struct Factorial有什么区别,为什么我要像struct Factorial<4>一样声明,为什么给出错误?

1 个答案:

答案 0 :(得分:2)

  

value关联的Factorial<4>::value是什么

它是匿名enum的成员,它是通过计算初始化的。为了找到它的价值,编译器必须知道Factorial<3>::value,这需要Factorial<2>::value,这需要Factorial<1>::value,这需要Factorial<0>::value

  

struct Factorial<0>struct Factorial之间有什么区别

template <> struct Factorial<0>是基础template <int N> struct Factorial的{​​{3}},仅在int模板参数为0时适用。在此处提供它可以阻止可能发生的无限回归。