问题标签 [enum-class]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
306 浏览

c++ - GCC 是否正确警告格式字符串与范围枚举不匹配?

在可变参数上下文中使用作用域枚举时,它被定义为作为其基础类型传递,如“我可以使用枚举类值作为可变参数函数的参数吗? ”范围内的枚举将被隐式转换,就像无范围的枚举一样。

考虑这个程序:

编译器(g++版本 6.3.0)对 a 的第一次打印很满意Foo,但是当我通过 a 时会抱怨Bar

g++版本 4.8.2 没有抱怨这一点,但g++6.3.0 确实如此(这就是我现在担心的原因)。当存在实质性不匹配时,两个版本都会抱怨第一次打印,例如使用%for %s,或者如果我更改Foo为使用long基础类型;这就是我启用-Wformat.

我知道警告不是标准一致性问题,并且我知道如何更改我的代码来解决这些问题(例如,在How can I output the value of an enum class in C++11? 的答案中使用函数),但是我还认为,如果警告会产生误报,则它们将无济于事。当枚举的基础类型与格式字符串中的相应转换规范匹配时,将作用域枚举传递给格式化的 I/O 函数是否有任何潜在的实际危害?

0 投票
2 回答
9634 浏览

c++ - 如何 std::map?

我正在尝试使用枚举类和 std::string 的 std::map,但我遇到了一些错误。我正在使用带有 -std=c++0x 的 gcc 4.4.7(这是固定的)

在 .h 文件中:

在 .cpp 文件中:

允许状态转换的方法如下:

编译时,我得到下一个错误:错误:'state_t'和'state_t'类型的无效操作数到二进制'operator<'

如果我将其更改enum class state_tenum state_t它可以工作。有没有办法在地图中找到枚举类?

提前致谢。

0 投票
1 回答
448 浏览

c++11 - 如何将 bitmask_operators.hpp 与命名空间和类一起使用

我想使用 C++11作为位域并在这里enum class找到一个不错的方法。

但是我坚持,如果我的枚举类声明不在全局命名空间中,而是在自定义命名空间中或在类内部。例如:

这总是给我错误:

直到我将模板特化放置到与所在模板相同的命名空间(在本例enable_bitmask_operatorsbitmask_operators.hpp为全局命名空间)。

但我想让我的专长接近我的枚举类声明。

在提到的文章中,Jay Miller 也评论了这个问题,似乎他提供了一个解决方案。但我没有按照他的提示解决这个问题bitmask_operators.hpp

示例代码在这里

编辑/部分解决:我同时,我得到了它的工作(只是一个转储复制和粘贴问题和神秘的错误消息;-)。我刚刚通过应用 Jay Millers constexpr 函数解决方案更新了我的示例代码。

但是在类中声明枚举类时仍然存在问题。当我向我的班级添加一个演员时,这个问题就出现了,比如:

然后我得到一个错误:

好吧,我通过添加static关键字来解决这个问题:

但是当我尝试使用位掩码运算符时会出现下一个问题,例如:

我收到一个错误:

显示错误的更新示例位于此处

0 投票
1 回答
46 浏览

c++ - 自定义类到枚举类的隐式转换

我想创建一个可以隐式转换为选定枚举类的类,以便对其进行切换。但是以下代码无法编译(gcc)。编译器抱怨转换不明确,但它也不能使用单个转换运算符(任何一个)进行编译。如何实现这种行为?

0 投票
2 回答
861 浏览

java - 单例(传统与枚举)

免责声明:如果这个问题太基本,我们深表歉意。

我正在学习 Singleton 并对其实现有一个快速的疑问,这些差异是纯粹的编码偏好还是我遗漏了什么?

单例类

示例实现

我的实现

我的实现是否仍然遵循单例模式?或者这就是 Enum 类应该被引用的方式。

谢谢。

0 投票
3 回答
29547 浏览

c++ - C++中字符串类型的枚举类

- 背景资料:

C++11 中有一个类称为枚举类,您可以在其中存储变量。但是,我只看到类的类型是 char:


- 问题:

有什么方法可以表达这个字符串类型的枚举类吗?

例如,


- 我的想法:

我尝试使用它,但出现错误,我不确定我是否做得对。我想使用字符串的原因是它们能够同时保存多个字符,因此它们对我的代码更有用。

0 投票
2 回答
939 浏览

c++ - 初始化枚举类类型的二维 std::array (C++11)

我在 C++11 中有以下类:

试图构造一个值为 EntryType::FREE 的 MyTable 对象,二维数组中的每个项目的值都是 0x01010101(每 8 位 1b),而不是预期的值 0x1

我猜这与我value被强制转换为有关int,但我不知道我应该做什么来修复它。

0 投票
0 回答
248 浏览

c++ - C ++从其余代码中隐藏枚举类

我有一些代码enum class。我只希望存在这个枚举类的单个实例。我知道单例类,但是有没有办法让枚举类只在当前文件中可见?

简单的例子:

显然用户需要能够读/写gCurrentState,但我不希望用户能够创建更多的StateInstanceOption.

这可能吗?

澄清一下,我不希望用户能够创建另一个实例StateInstanceOption,但我确实希望他们能够看到gCurrentState.

0 投票
1 回答
1824 浏览

c++11 - c++11:枚举成员初始化

我有一个定义如下的类

xval.zzz - is undefined 或 X::Zzz.zero 的值是多少?我知道它对于常规枚举是未定义的,我想知道类型化枚举的行为是否不同。

0 投票
2 回答
1375 浏览

c++ - 枚举类的超出范围值

当我enum class在函数内部定义一个函数时,它具有来自可用选项的值。但是,当我在一个类中定义它时,它没有任何选项的值。那么初始值是g.f多少呢?比较时会返回true什么?((g.f==??)==true)?