问题标签 [strongly-typed-enum]

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 投票
13 回答
302646 浏览

c++ - 如何自动将强类型枚举转换为 int?

a::LOCAL_A就是强类型枚举试图实现的目标,但有一个小的区别:普通枚举可以转换为整数类型,而强类型枚举在没有强制转换的情况下无法做到这一点。

那么,有没有一种方法可以将强类型枚举值转换为整数类型而无需强制转换?如果是,如何?

0 投票
4 回答
7879 浏览

c++ - 为什么 C++ numeric_limits::max() == 0?

下面是一些看起来可行的代码:

但它在 Linux 上的 GCC (4.6.2) 和 clang (2.9) 下都失败了:枚举类型的 max() 实际上为零!即使您使用 C++11 枚举类型说明符明确说明您希望枚举具有什么类型,这仍然是正确的。

为什么是这样?至于 C++11 的行为,是否有明确要求?我在关于强类型枚举的论文 N2347 中没有提到它。

0 投票
0 回答
433 浏览

c++11 - g++ 与 c++11 在强类型枚举上按位或

我有内部 bitOr 和 bitAnd 函数来处理按位运算。它通常可以正常工作,在 g++ 4.7 和 VC++ 2012 上测试,但在 g++ 4.4.6 中使用 c++0x std 失败。

要使用这个我做

我得到内部 g++ 错误,是否有人对枚举类型进行按位运算有任何其他工作?

我知道这是编译器问题,但如果有人有解决方法对 g++ 4.4.6 (SL RHEL) 的枚举进行按位运算,这将是很好的,因为这适用于其他编译器。这是我自己的做法

0 投票
1 回答
923 浏览

c++ - g++-4.4 中的强类型枚举

0 投票
2 回答
515 浏览

c++ - c++11 vs c++ - 枚举差异

在这种情况下,如何在不将枚举计数转换为 int 的情况下使用枚举?

0 投票
1 回答
310 浏览

c++ - 强枚举到整数,反之亦然

这是我的来源(作为答案),如何实现underlying_value 和to_enum 函数。 如何自动将强类型枚举转换为 int?

基础值 - 没问题。但是, to_enum - 有问题。

看:

Q:如何正确实现to_enum?

0 投票
4 回答
176 浏览

c++ - 如何在枚举中指定一个数字

对不起,如果问题可能非常愚蠢:我有一个枚举,枚举中包含的名称必须是一个数字:

如果我没记错的话,名字前面的下划线必须保留给实施。但是,在枚举中指定数字的首选方法是什么?

让我们举一个更具体的例子:我可以写例如:

但是要使用枚举,我必须写:

这非常冗长。或者。

但第二种选择不太清楚

0 投票
6 回答
8897 浏览

c++ - 为什么不能通过指针将 C++11 强类型枚举转换为基础类型?

在 C++11 中,我们可以将强类型枚举 ( enum class) 转换为其底层类型。但似乎我们不能将指针转换为相同的:

我试图理解为什么会这样:枚举机制是否有一些东西使得支持这一点变得困难或荒谬?这是标准中的简单疏忽吗?还有什么?

在我看来,如果枚举类型真的建立在上面的整数类型之上,我们应该不仅可以转换值,还可以转换指针。我们仍然可以使用reinterpret_cast<int*>C 风格的铸件,但这比我认为我们需要的要大。

0 投票
2 回答
107 浏览

c++ - 在成员函数的默认参数中使用强类型枚举的成员

我主要使用 G++,现在使用 Visual Studio 2015。我想用 VC++2015 构建我的项目,但我收到错误消息,指出在给定默认参数的函数中无效使用 '::' 并带有前向声明的强类型枚举。

这是一些代码:

在使用默认参数 Bar::Baz 声明函数 DoSmth() 时,它给了我以下错误:

使用 G++(使用 4.9 和 5.1 测试)代码编译得很好,但使用 VC++2015 则不行。

我完全知道我必须在使用前声明一些东西,但是。仅仅是因为 VC++2015 没有在类的范围内寻找 Bar 的完整声明和定义,而 G++ 却可以吗?或者,也许 G++ 只是采用完整的声明并将其与前向声明“合并”(因为它们在同一范围内),从而使其对类完全可用?或者也许我完全错了,完全不同的东西导致了这个?

我可以忍受我必须更改所有强类型枚举的声明才能使其与 VC++2015 一起使用。

但我也想知道这是为什么?

0 投票
2 回答
281 浏览

c++ - 不允许将强类型枚举用作相同基础类型的参数?

考虑以下代码。我假设通过指定强类型枚举的类型,我可以使用它传递给相同类型的函数和模板,因为指定的基础类型是相同的;尽管编译器抱怨缺少对类型的强制转换。在下面的代码中,删除back toclass枚举上的关键字和说明符将起作用。我知道他们不希望对强类型枚举进行任何类型转换,但是当底层类型与函数或模板预期接收的类型相同时,我希望编译器不会抱怨这一点而不是强制一个特定的演员表。想法?Test::TOTAL_ITEMSTOTAL_ITEMS