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

c++ - 将枚举类与 Boost 测试一起使用

我有一个想在单元测试中使用的枚举类:

我想按如下方式使用它:

但是我得到了这个错误,很明显是因为 boost test 试图输出这个值:

添加丑陋static_cast的“解决”问题:

但我想避免对每个枚举类都这样做。我还想避免<<为每个枚举类定义流运算符。

有没有更简单的方法来使用枚举类和 boost 测试?

还是其他单元测试框架有更好的方法来处理枚举类?

0 投票
4 回答
5041 浏览

c++ - 用 Cython 包装枚举类

我正在尝试将枚举类包装在 c++ 头文件中以用于 cython 项目。

例如,这怎么能

用 Cython 包裹。

0 投票
1 回答
183 浏览

templates - 模板 constexpr 方法中使用的枚举类位掩码

我的微控制器项目中有以下 C++11 代码:

这工作正常,并允许我传递可变数量的 uint32_t 作为模板参数。然后编译器将对它们进行 OR 运算并将每个调用替换为一个常量值。对于微控制器来说,这是理想的,因为它在分配给寄存器之前不必执行 OR 操作。

在某些情况下,我想使用如下枚举类作为值:

由于我有多个这些枚举类,我正在寻找一种在上述 mask_or 代码中使用枚举类值的通用方法。总之,我希望能够做到这一点:

理想情况下,我希望 mask_or<...>::value 为 constexpr 以保持低代码大小和高速度。

我觉得这应该是可能的,但我似乎无法让它发挥作用。谁能帮我?

0 投票
0 回答
209 浏览

templates - 作为模板类的一部分的条件枚举

我正在为微控制器开发我的 c++ 库,我需要一种方法来根据模板类型指定不同的枚举类内容。

到目前为止我有这个代码:

Timer 类应该只静态使用。我希望根据模板类型修改选项枚举内容,以避免在特殊功能寄存器(SFR)中设置不支持的选项。上面的代码是我最好的尝试,但是编译器不喜欢我使用 decltype。

有没有办法通过上面定义的类型特征根据模板类型声明不同的枚举类内容?

0 投票
1 回答
129 浏览

c++ - 类型转换在具有受限存储的枚举的开关中失败

SSCCE

产生错误:

虽然用g++编译,但用clang++编译得很好。为什么用 (2) 标记的赋值可能但用 (3) 标记的case子句不行?

too small storage关于离题的警告

0 投票
1 回答
7665 浏览

c++ - 以枚举类的 std::pair 作为键的 unordered_map 不完整类型结构 std::hash 的使用无效

我想使用 aunordered_map<std::pair<enum_class,other_enum_class>,std::uint8_t>来管理一些像素图格式。

这是最小的代码:

使用 GCC,当我尝试实例化类时出现错误:

main.cpp:14:24:错误:无效使用不完整类型'struct std::hash'
return std::hash()(x.first) ^ std::hash()(x.second);
在来自
/usr/local/include/c++/5.2.0/bits/basic_string.h:5469:0的文件中,来自 /usr/local/include/c++/5.2.0/string:
52,
[...]

使用 Clang 我也有一个错误

错误:未定义模板“std::hash”的隐式实例化返回 std::hash()(x.first) ^ std::hash()(x.second); /usr/local/bin/../lib/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/bits/hashtable_policy。 h:1257:16:注意:在此处请求的函数模板特化“pair_hash::operator()”的实例化中 [...]

使用 VS2013 我没有错误,代码编译并执行。

我的代码中缺少什么?

0 投票
1 回答
325 浏览

c++ - 枚举类模糊继承

在使用应该是强类型的枚举时,我真的在为继承问题而苦苦挣扎——但是当通过继承使用枚举时,这些枚举似乎是模棱两可的。

我正在使用 g++ (GCC) 4.7.2

我找不到任何信息为什么它不应该以这种方式工作。我是否遗漏了一些明显的东西。

0 投票
1 回答
206 浏览

c++ - 使用枚举类定义标志

在现代 C++ 中使用枚举作为标志的适当模式是什么?

这个问题源于我对技术规范A Proposal to Add 2D Graphics Rendering and Display to C++的阅读,其中 McLaughlin、Sutter 和 Zink 提出了基于Cairo API 的用于 2D 图形的 C++ API

在整个 API 声明中,作者充分利用了 C++11。特别是,它们的枚举都被声明为:

除了一个:

text_cluster_flags类型”用于类方法中:

我假设无关的声明是text_cluster_flags可以掩盖的,如:

你不能用enum class枚举来做:

作者是否应该定义屏蔽运算符?或者他们的enum-within-namespace模式是有效的实践吗?

0 投票
0 回答
111 浏览

c++ - 出现错误,因为编译器混淆了 C++11 和托管 C++ 之间的静态枚举类

我最近将一个托管 C++ 项目从 Visual Studio 2010 迁移到 2013。

在类的定义中,我有:

试图编译它给了我错误。原因似乎是 2013 版本在幕后使用 C++11,它将托管 C++ 枚举类与 C++11 枚举类混淆了。

使我的代码适应新版本的正确方法是什么?

0 投票
2 回答
635 浏览

c++ - 内部范围枚举、散列函数和 unordered_set 数据成员

我有以下问题,我找不到解决方案。当然,可能根本不存在解决方案,但我想在放弃之前尝试一下SO。

首先,一个编译没有错误的片段:

考虑到这段代码,我发现自己需要将其unordered_set作为派生类的数据成员,S或者至少是派生类。std一个可能的工作解决方案是在命名空间关闭后添加以下行:

另一种可能的解决方案可能是(我没有尝试过)使用无范围的枚举。无论如何,我所做的第一次尝试是修改的定义struct S如下:

这以错误告终,因为(如果我正确理解了问题)unordered_set需要专门的hash功能。无论如何,后者S::E至少需要声明,因此交换两段代码是不够的。

这是错误日志的第一部分(因为它很长):

通常,在这种情况下,我可以使用前向声明之类的方法来解决,如下例所示:

不幸的是,我无法对嵌入在结构中的枚举做类似的事情,这就是我开始这个问题的原因。是否有可能解决它,从而避免定义派生类,或者派生是这种情况下唯一可行的解​​决方案?D