问题标签 [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 投票
2 回答
214 浏览

c++ - 如何使用 SFINAE 为枚举类中的缺失值制作 polyfill?

我认为这应该很容易,但我已经为此苦苦挣扎了一段时间,所以我想我应该在这里问。

我想制作一个模板元函数,它将对应于 C++11 枚举类的类型作为其参数,并返回一个 int:

  • 如果枚举类E有一个枚举值a,则返回static_cast<int>(E::a)
  • 如果枚举类E没有枚举值a,则返回42

然后我想创建一个模板函数,它接受某个枚举类的运行时实例E,静态将其转换为 int,并检查它是否与此元函数匹配。

我尝试了多次迭代,模板化结构并使用模板部分专业化来尝试区分是否E::a存在,还使用函数模板......我不确定我是否可以重建我尝试过的所有内容,但这是最近的迭代:

这不起作用,因为我正在重新定义默认参数。

这不起作用,因为非类型参数不能依赖于类型参数。

这不起作用,因为

这样做的正确方法是什么?


动机:

我想这样做的原因是,我想解决我在这里报告的似乎是 libstdc++ 中的错误:https ://gcc.gnu.org/bugzilla/show_bug.cgi?id=68307

<system_error>标头中的 C++11 中,有一堆std::errc应该定义的枚举器值,但是,在 mingw 上,它们中的一些丢失了。这会在我的程序中导致编译错误,因为根据Asio配置方式,lib::asio::errc可能会被 typedef 为std::errc,并websocketpp假定这lib::asio::errc::operation_canceled是一个已定义的符号。我想拼凑一些可以在websocketpp代码中放置的垫片,以便在任何平台上都可以接受地定义它(lib::asio::errc::operation_canceled如果存在,或者<cerrno>如果不存在,则取消。)

0 投票
0 回答
55 浏览

c++ - 范围枚举声明符的“使用”指令?

有没有办法使用某种using指令直接访问枚举类类型的成员?

我知道我可以使用命名空间来做到这一点,因此另一种选择是使用命名空间和传统的枚举:

但是,我想保留类枚举的优点(如类型安全等)。

0 投票
1 回答
337 浏览

c++ - Boost 测试因命名空间内的枚举类而失败

如果你operator <<为 C++11 定义了一个enum class,那么你可以成功地将它与 Boost 的单元测试库一起使用。

但是,如果您将enum classa 放入内部namespace,则 Boost 代码将不再编译。

为什么放入enum class内部会namespace阻止它工作?两种方式都可以正常工作,std::cout所以这肯定意味着operator <<正确吗?

这是一些演示该问题的示例代码:

0 投票
2 回答
665 浏览

c++ - C++14 运算符 << 用于流插入和枚举类

我正在编写一个游戏,其中有 2 个玩家,“BLACK”和“WHITE”。

我有以下枚举类:

我想为这个类写一个 ostream operator<<。这是我的尝试:

但是我收到以下编译器错误:

我认为问题在于我正在嵌套枚举类,并且 operator<< 在另一个类中;class Player.

如果不从此类中删除枚举,我能做些什么吗?

0 投票
1 回答
3133 浏览

c++ - 枚举类和提升序列化

如何序列化/反序列化class具有enum class使用 boost 序列化成员的成员。例子:

我不能使enum_class序列化,因为它不接受friendmember functions。解决办法是什么?

0 投票
1 回答
1499 浏览

c++ - switch() 中未处理的枚举类值 - 异常还是断言?

lvl是一个enum class

共识是default应该存在的,但相关问题中的意见对于它应该做什么存在分歧。让整个事情崩溃?使当前线程崩溃?尝试优雅地处理异常?

双方在评论中提出了一些论点,但讨论并不完全有定论。

有人可以提供一个全面的答案,应该使用哪个,或者在什么条件下使用?

0 投票
1 回答
114 浏览

c++11 - 我正在使用 :: 运算符,但我仍然收到枚举类错误不是类、命名空间或作用域枚举的错误

我想打印我的 Car 对象的颜色和噪点。我正在尝试在我的 Car 类中使用 c++11 的枚举类。编译时出现错误 Car::Color 和 Car::Noise 不是类、命名空间或范围枚举。我正在使用 :: 运算符来访问枚举类。但错误仍然存​​在。问题似乎出在 Car.cpp 文件中。这是我的代码。非常感谢任何建议。非常感谢。

汽车.h

汽车.cpp

主文件

0 投票
0 回答
62 浏览

c++ - 是否可以在单独的地方声明一个作为类的一部分的枚举?

我有一个具有type自定义枚举类属性的类Class::Type。目前的声明Class看起来像这样:

但我想把声明Class::Type放在其他地方(最好类声明之后),这样它就不会妨碍类声明中的视觉效果:

那可能吗?如何?

0 投票
1 回答
2763 浏览

qt - QML 组件枚举类属性

我在一个单独的qml文件中有委托组件,我希望在其中有一个属性,它是来自 c++ QObject 的枚举类型。这可能吗?

这是一个最小(非)工作示例:

卡.h

主文件

测试卡.qml

我得到的编译器错误:

D:\Programs\Qt\Qt5.7.0\5.7\mingw53_32\include\QtQml\qqml.h:89: 错误:'staticMetaObject' 不是 'Card::InGameState' 的成员 const char *className = T::staticMetaObject 。班级名称(); \

枚举类不是 QObject,这就是我收到此错误的原因,对吧?但是 Q_ENUM 宏不应该让它在 MetaSystem 中可用吗?

你能帮我解决这个问题吗?我可以删除枚举类,并将其更改为枚举,并在 qml 中使用 int 属性,但我想使用 c++11 功能。

0 投票
2 回答
611 浏览

lambda - 为什么 lambda 表达式可以返回本地枚举类类型?

为什么以及如何工作?这里的“自动”是什么类型?

enum class Locallambda 类型之外是未知的。它是一个enum class,因此不能是int没有演员表的类型,AFAIK。如何返回本地类型,auto以及它在 lambda 之外的真正类型是什么?