在类中使用 C++20 中的"使用枚举"可能吗?
Use 'using enum' in C++20 in classes possible?
在这个答案中提到,在即将推出的 C++20 标准中,可以在enum class
上使用using
语句并将枚举字段导入本地命名空间。
我想知道这是否也意味着我也可以在这样的类定义中使用它:
class Foo {
enum class Color
{
red,
blue
};
using enum Color;
};
int main()
{
Foo::Color c = Foo::red;
}
还是我仍然需要提供完整的命名空间?
Foo::Color c = Foo::Color::red;
我在 wandbox.org 中尝试过,但似乎 gcc 和 clang 都还不知道using enum
。
是的,Foo::Red
可以正常工作。using enum E
的行为如下,来自 [enum.udecl]:
引入了命名枚举的枚举器名称,就像通过每个枚举器的use声明一样。
该标准包含这种情况的示例:
[ 注意:类作用域中的using-enum-声明将命名枚举的枚举器作为成员添加到作用域中。这意味着成员查找可以访问它们。[ 示例:
enum class fruit { orange, apple }; struct S { using enum fruit; // OK, introduces orange and apple into S }; void f() { S s; s.orange; // OK, names fruit::orange S::orange; // OK, names fruit::orange }
— 尾声 ] — 尾注 ]
但是请注意,围绕此功能的特定拼写存在一些争议。enum E
就是所谓的详细类型说明符(很像class C
或struct S
(。通常,精心设计的类型说明符的行为与其基础版本完全相同。阐述只是为了消除歧义,你很少需要消除歧义,所以你不会经常看到它。然而,在这种特殊情况下,using enum E
和using E
实际上意味着截然不同且完全不相关的事情。因此,请记住,尽管目前在工作草案中,甚至已经在裁谈会上发表,但这一特点可能还没有真正达到20 C++。因此,编译器不太可能实现此功能,直到他们确定有必要实现(C++20 编译器编写者并不完全缺乏工作......
相关文章:
- 将用户值与枚举中的值进行比较
- 其他类中的枚举类的二传手和获取器
- 类中枚举类的运算符重载
- C++11 类中放置的枚举类的重载运算符
- 从枚举中选择适当的函数
- 多个枚举中的名称相同
- 如何在C 中相互依存的枚举中打印值的名称
- 枚举声明中的枚举器的类型
- 警告 C4481 枚举中使用的非标准扩展名'MyEnum'限定名称中使用
- C++ 中的枚举中的数组
- 以最新的C 的类型安全方式从枚举中随机选择元素
- 不同文件中同一命名空间中的 2 个不同枚举中的相同标识符
- 如何确定枚举中的成员数
- 如何识别int代码值属于枚举中的哪个常量
- 枚举中的Visual studio编译器错误
- c++枚举中的宏
- c++上的枚举中的枚举
- 怀疑解析枚举中的命名空间
- 模板类中枚举中的整数溢出
- C++枚举中的最大值和最小值