gpt4 book ai didi

c++ - C++中的模板,为什么必须使用枚举

转载 作者:可可西里 更新时间:2023-11-01 17:22:59 26 4
gpt4 key购买 nike

我有一个关于 Scott Meyers 的“Effective C++”中第 48 项的快速问题。我只是不明白从下面的书上复制的代码,

    #include <iostream>
using namespace std;

template <unsigned n>
struct Factorial
{
enum { value=n*Factorial<n-1>::value };
};

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

int main()
{
cout<<Factorial<5>::value<<endl;
cout<<Factorial<10>::value<<endl;
}

为什么我必须在模板编程中使用枚举?有没有其他方法可以做到这一点?提前感谢您的帮助。

最佳答案

您还可以使用 static const int:

template <unsigned n>
struct Factorial
{
static const int value= n * Factorial<n-1>::value;
};

template <>
struct Factorial<0>
{
static const int value= 1;
};

这也应该没问题。两种情况下的结果相同。

或者您可以使用现有的类模板,例如 std::integral_constant (仅在 C++11 中)为:

template <unsigned n>
struct Factorial : std::integral_constant<int,n * Factorial<n-1>::value> {};

template <>
struct Factorial<0> : std::integral_constant<int,1> {};

关于c++ - C++中的模板,为什么必须使用枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11916547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com