匿名枚举类

时间:2011-08-03 06:56:37

标签: c++ enums c++11

是否可以编写匿名枚举类,然后比较它包含的内容?例如

enum class { APPLE, BANANA } fruitType;
// ...
if (fruitType == fruitType::APPLE)
    // ...

6 个答案:

答案 0 :(得分:9)

不,fruitType是一个变量(尽管名称中有Type)。您不能使用变量名来访问有关其类型的内容。

使用enum class的想法是,除非使用类型名称作为前缀,否则这些值在定义之外是不可见的。如果类型没有名称,这将很难!

答案 1 :(得分:1)

不是这样的。 fruitType::APPLE不正确,因为fruitType不是命名空间的名称。但是,如果您只是简单地写fruitType == APPLE(没有前缀APPLE),那就没关系了。

答案 2 :(得分:1)

我认为这没有意义。它打破了enum类的整个想法,它被引入来解决传统枚举的一些问题(将枚举器导出到周围的范围,隐式转换为int,不可能指定底层类型)。如果声明匿名枚举类,则其枚举数不可访问,因为它们不能被限定。所以它没有任何意义。

答案 3 :(得分:1)

你不能这样做:

enum class { APPLE, BANANA } fruitType;
if (fruitType == fruitType::APPLE)

但你可以这样做:

enum class FT { APPLE, BANANA } fruitType;
if (fruitType == FT::APPLE)

......这可能同样容易。

注意,您可能想要初始化它:

enum class FT { APPLE, BANANA } fruitType = FT::BANANA;
if (fruitType == FT::APPLE)

答案 4 :(得分:0)

是的,这是possible。但如果它是匿名的话,它将无法在任何范围之外访问。

修改:问题的第二部分是错误。您不必提及fruitType::。然而,即使在删除后;编译失败。这描绘了它,它不可用。

所以我不确定你的第二个问题。我有asked a similar question回来了。

答案 5 :(得分:0)

你不能。

但我同意能够做到这一点会很高兴。有时枚举已经是一个充分嵌套和有限范围的一部分,进一步的限定将是纯粹的矫枉过正,但你仍然希望禁止转换为int。所以你必须做出权衡:选择这两种功能,或两种功能。