我不明白这段代码如何(来自维基百科) http://en.wikipedia.org/wiki/Template_metaprogramming works:
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
}
- 这个奇怪的模板是什么
需要
<int N>
?
- 这第二是什么
奇怪的模板
<>
?
- 什么是
enum
的报酬?
- 有什么优势
使用这个而不是正常的
运行时阶乘计算?
- 你们多久使用一次这个?我已经使用 C++ 一段时间了,但以前从未使用过它。我错过了 C++ 的多大一部分?
Thanks!
在 C++ 中,模板参数可以是类型(前缀为class
or typename
)或整数(前缀为int
or unsigned int
)。这里我们处于第二种情况。
template<> struct Factorial<0>
是 Factorial 类模板的完整特化,这意味着0
被认为是一个特殊值,对应于它自己的阶乘版本。
枚举是元编程 C++ 中计算值的方法
首先创建此代码的原因是为了创建一个可以使用元编程完成微积分的概念证明。优点是生成的代码非常高效(调用Factorial<4>::value
相当于在代码中简单地写入“24”。
- 你们多久使用一次这个?我已经使用 C++ 一段时间了,但以前从未使用过它。我错过了 C++ 的多大一部分?
使用这种方法很少能实现这样的功能,但现在元编程的使用越来越多。看Boost 元编程库 http://www.boost.org/doc/libs/release/libs/mpl以获得可以做什么的提示。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)