我是C++的新手,需要元编程帮助。我已经检查了枚举示例,其中调用factorial<4>::value产生24

我需要对代码进行修改,以便factorial<4>()返回24。现在已经尝试了一段时间,也不知道如何在Internet上精确搜索它。任何帮助将非常感激。谢谢 !

这是我目前所拥有的:

template <int N>
struct factorial
{
    enum { value = N * factorial<N - 1>() };
};

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

最佳答案

您可以使用constexpr函数:

template<int N>
constexpr int factorial() {
    return N * factorial<N - 1>();
}

template<>
constexpr int factorial<0>() {
    return 1;
}



这将使您可以致电:
factorial<4>();

并获得24作为返回值。



或者,您可以使用隐式转换运算符operator int()进行从structint的隐式转换:
template<int N>
struct factorial {
    static const int value = N * factorial<N-1>::value;
    operator int() { return value; }
};

template<>
struct factorial<0> {
    static const int value = 1;
    operator int() { return value; }
};

关于c++ - C++中的元编程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24235232/

10-14 09:19