是否可以编写匿名枚举类,然后比较它包含的内容?例如
enum class { APPLE, BANANA } fruitType;
// ...
if (fruitType == fruitType::APPLE)
// ...
答案 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。所以你必须做出权衡:选择这两种功能,或两种功能。