C 示波器的枚举是隐式转换为整数的
C++ scoped enums that are implicitly convertable to integers
我对enum
S和enum class
的不同形式有一个疑问,专门用于指定大量(scoped!)常数。
我想知道是否有一种方法可以声明A scoped Enum ,这是隐式可转换的整数。这样的用户酶是指定注册地址,并能够使用MY_REGISTERS::FOO
之类的东西访问它们。
这是我知道并遇到的选项,请想象具有签名void do_something(uint32_t bla)
的功能。
1:enum class
枚举类是范围的,但不能隐式转换为整数。我发现重要的是我不必将其 static_cast
到一个整数上,所以这似乎不合适。
enum class Foo : uint32_t
{
BAR = 0x0000,
BAZ = 0x0001
};
do_something(Foo::BAR) // Illegal, I'd have to `static_cast` here
2:enum
常规的C样式枚举可隐式地转换为整数,但没有范围(并污染它在其中的名称空间)。这是一个示例,说明为什么我发现这对我的用例酶不受欢迎:
enum Foo : uint32_t
{
BAR = 0x0000,
BAZ = 0x0001
}
do_something(Foo::BAR) // Legal, and what I am looking for
do_something(BAR) // Legal, whilst I don't want this to be possible
3:名称 enum
这有效,但是如果我在某个地方遇到这个问题,我会眉毛。某事告诉我可能有更好的方法
namespace Foo
{
enum dontcare : uint32_t
{
BAR = 0x0000,
BAZ = 0x0001
};
}
do_something(Foo::BAR) // Legal, and what I am looking for
do_something(BAR) // Illegal, just like I want it to be
4:名称 static constexpr
尽管这做了我想要的,但我又(就像命名为enum
一样)觉得一定有更好的方法。
namespace Foo
{
static constexpr uint32_t BAR = 0x0000,
static constexpr uint32_t BAZ = 0x0001
}
do_something(Foo::BAR) // Legal, and what I am looking for
do_something(BAR) // Illegal, just like I want it to be
因此,总的来说,有没有更好的方法来解决这个问题,或者我必须坚持使用命名级的enum
S或名称为constexpr
S?
您可以通过将struct
与嵌套的匿名枚举混合(编辑:我想枚举本身没有)来破解自己的范围枚举。:
struct Foo{
enum: uint32_t
{
BAR = 0x0000,
BAZ = 0x0001
};
};
实时演示
根据c 11语义([dcl.enum]),它不是范围的枚举,但它至少是一个被范围范围为 Foo
类的枚举。它是可以使用的,就像您想要的方式一样,不污染全局名称空间:
do_something(Foo::BAR);
相关文章:
- 努力将整数转换为链表。不知道我在这里做错了什么
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 如何在C++中将整数转换为其数字数组
- 尝试将字符串/字符转换为整数会产生意外结果
- 如何使用C++将字符串中的字符转换为整数变量
- 如何将整数字符串转换为整数的二维向量?
- 如果整数与指针大小相同,则重新解释将整数转换为指针双射是否具有双射作用?
- 使用 "stringstream " 将字符串转换为整数
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 如何检测 std::vector::emplace_back 上的隐式转换损失整数精度
- 如何防止双精度值到整数的隐式转换
- 为什么此指针值不能转换为整数的规则是什么?
- 如何解决隐式转换丢失整数精度:'size_t'(又名"无符号长")到'int'警告?
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- 为什么在将 void 指针转换为整数指针时出现分段错误
- 将字符串(可以是十进制字符串或十六进制字符串)转换为整数C++
- 整数类型应该显式转换(例如"int"到"无符号")还是只会增加混乱?
- 如何使用 STL 算法将整数向量转换为字符串向量?
- 无法将"整数 (*)[m]"转换为"整数 (*)[100000]
- 静态强制转换允许转换对象指针,但不允许转换整数