问题标签 [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 回答
841 浏览

c++ - 调用重载运算符时枚举类的用户定义隐式转换失败

考虑以下示例:

编译器版本:

上述发现适用于clang 3.4gcc 4.8.2。测试 2. 实际上在gcc 4.7.3with上编译得很好-std=c++11。可能是早期 GCC C++11 实现中的一个错误?

断言:

  • 鉴于 1. 编译,调用~运算符时会检查用户定义的隐式转换。
  • 鉴于 4. 编译,用户定义的隐式转换会检查enum class对象。

问题:

  • 上述说法正确吗?
  • 如果是,为什么 2. 编译失败?
  • 鉴于 2. 无法编译,为什么 3. 编译?
0 投票
2 回答
65 浏览

c++ - C++:如何让函数接受来自任何命名空间的具有相同类名的对象?

主类.h:

主类.cpp:

这就是我希望能够做到的。这可能吗?实际上,如果enum 类表现得像一个具有继承的类,那就太好了,但我知道我不能那样做。我尝试重写的次数越多,它就会一直螺旋式上升,直到我几乎要为每个案例编写特定的类(我在示例中不止两个)。但是代码非常相似,真的。

我也知道另一种选择是允许DoStuff(const Parameters p)只是一个DoStuff(const int p_val)并在外部进行静态转换......但是我必须在其他地方进行所有静态转换,我不'没有得到很好的枚举类类型检查。

如果不可能,那很好……但如果是这样,那就太糟糕了。

0 投票
4 回答
8778 浏览

c++ - C ++ 11在switch case中混合枚举类和unsigned int将无法编译

为什么这段代码不能编译,我该怎么做才能让它编译?

想法:

https://ideone.com/jTnVGq

无法在 GCC 和 Clang 中构建,适用于 MSVC 2013。

0 投票
2 回答
91 浏览

c++ - 有没有一种简单的方法可以将枚举类转换为字符串(c++)?

虽然有一些解决方案可以轻松地将枚举转换为字符串,但我希望使用enum class. 有没有一种简单的方法可以将 a 转换enum class为字符串?

(给出的解决方案不起作用,因为枚举类不能索引数组)。

0 投票
3 回答
11232 浏览

c++ - 如何在 Codelite 中启用 C++11 功能

以下代码在 Xcode 5 和 Visual Studio 2013 中编译和运行。我有兴趣尝试 Codelite,但 Codelite 不会编译以下程序(这是一个问题,因为我在项目中使用范围枚举)。据我了解,Codelite 使用与 Xcode 相同的编译器。

代码对 C++11 有效吗?为什么 Codelite 无法编译?

这是 Codelite 的构建输出。如果出现乱码,它会指向变量实例化中的单词“SampleEnum”并说“期望一个类或命名空间”。

0 投票
1 回答
689 浏览

c++ - Using `reinterpret_cast` on an enum class - valid or undefined behavior?

ideone

Is this code guaranteed to always work? Or is it undefined behavior?

0 投票
1 回答
511 浏览

c++ - GoogleTest 1.7.0`枚举类`编译错误

当我尝试enum class从测试夹具中引用一个时,它无法编译并出现错误./gtest_mcp23s17.cpp:25:52: error: no type named 'HW_ADDR_6' in 'mcp23s17::HardwareAddress' TC_mcp23s17 _gpio_x(mcp23s17::HardwareAddress::HW_ADDR_6); ~~~~~~~~~~~~~~~~~~~~~~~~~~~^

但是,如果我将引用保留在测试本身中(保留所有其他代码不变),它会毫无错误地编译并按照您的预期运行测试。这是 GoogleTest 中的一个错误,还是就测试而言,这种情况有什么不同?

测试 (通用) [编译]

测试夹具: [编译]

测试夹具 (在夹具类中声明了 gpio_x) [失败]

0 投票
1 回答
118 浏览

c++11 - define enum class with same name compared to enum

Why this compiles in c++11:

while this doesn't:

?

0 投票
1 回答
259 浏览

c++ - 枚举类的 c++ typedef/类型替换

据我所知,目前无法执行typedefC++11 enum class。我想知道enum在封装类之外引用变量时是否有任何其他方法可以减少变量名称的长度。这是一个例子:

最重要的问题是我必须引用enum外部名称的长度SegmentActivityType。例如,为了进行类型比较,我需要编写SegmentActivity.getState() == SegmentActivityState::ActivityStateType::PreExecution,这非常冗长。我不想做的两件事是:

  1. typedefSegmentActivityState
  2. 移动enum classActivityStateType outside of the classSegmentActivityState` 定义。
0 投票
1 回答
155 浏览

c++ - 通过引用修改作用域枚举

我越来越发现范围枚举难以使用。我正在尝试编写一组函数重载,包括一个范围枚举的模板,该模板通过引用设置/初始化一个值——如下所示:

但是,我不太明白如何在set_value不引入多个临时值的情况下编写模板版本:

我相信static_cast除了 . 之外还引入了第二个临时值raw_val。我想编译器可能会优化其中一个或两个,并且在任何情况下它都不应该在性能方面产生太大影响,因为set_value调用也会生成临时值(假设它不是内联的),但是这似乎仍然不优雅。我想做的是这样的:

...但是这是无效的(相应的代码也不是直接使用指针而不是引用),因为作用域枚举与它们的底层原语通过继承无关。

我可以使用reinterpret_cast,从一些初步测试来看,它似乎可以工作(而且我想不出它为什么不工作的任何原因),但这似乎在 C++ 中不受欢迎。

有没有“标准”的方式来做到这一点?