【发布时间】:2011-01-11 11:21:48
【问题描述】:
我想知道在使用模板元编程技术时使用静态 const 和 enum hack 之间有什么区别。
EX:(通过 TMP 斐波那契)
template< int n > struct TMPFib {
static const int val =
TMPFib< n-1 >::val + TMPFib< n-2 >::val;
};
template<> struct TMPFib< 1 > {
static const int val = 1;
};
template<> struct TMPFib< 0 > {
static const int val = 0;
};
对比
template< int n > struct TMPFib {
enum {
val = TMPFib< n-1 >::val + TMPFib< n-2 >::val
};
};
template<> struct TMPFib< 1 > {
enum { val = 1 };
};
template<> struct TMPFib< 0 > {
enum { val = 0 };
};
为什么要使用一个而不是另一个?我已经读过在类内部支持静态 const 之前使用了 enum hack,但是为什么现在使用它呢?
【问题讨论】:
-
+1:确实是一个很好的问题,我也想看看答案会是什么,除了显而易见的。
-
static const 允许 int 以外的类型。例如双倍。
标签: c++ templates metaprogramming