模板中的无名枚举

时间:2009-03-03 19:28:51

标签: c++ templates

很多模板化代码如下所示:

template <typename T>
class foo
{
   enum { value = <some expr with T> };
};

在主要检查计划中可以看到一个例子here,我也曾在Factorial实施中看到它。

我的问题是为什么要使用无名的枚举?这有什么特别的原因吗? 例如,静态const int可以起作用吗?

编辑:

@Benoît:感谢您的链接,它提供了我一直在寻找的洞察力!

2 个答案:

答案 0 :(得分:8)

静态const变量将占用内存(如Sean所说),而枚举不占用任何内存。它们只存在于编译器的世界中。在运行时,它们只是常规整数。

除此之外,它可以工作,除了编译器对标准的不良实现。

对于boost邮件列表中的主题有一个彻底的thread

答案 1 :(得分:3)

如果我没记错的话,静态const会要求你通过声明和定义变量来分配空间,而未命名的枚举则不需要。