我是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()
进行从struct
到int
的隐式转换: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/