如何获得枚举项的类型?

Nur*_*yev -2 c++

这里有个新手问题...

如何创建一个元组类型,其中元组的一个项目是一个特定的项目enum

enum class MyEnum
{
  MyEnum_FirstItem
};

typedef std::tuple<int, MyEnum::MyEnum_FirstItem> MyTuple; // constant "MyEnum::MyEnum_FirstItem" is not a type name
Run Code Online (Sandbox Code Playgroud)

如何获得枚举项的类型而不是值?

PS用“获取枚举项目类型”搜索Google,但未找到任何内容。

我来自TypeScript,出于文档目的,我曾经在那里做过。另外,真正的问题可能应该是:c ++中是否有确切的数字类型?

Lig*_*ica 6

如何获得枚举项的类型?

的类型MyEnum_FirstItemMyEnum。枚举器没有不同的类型。

(但是,请继续阅读...)


您想在这里做什么?您是否要创建一个元组,其第二个参数只能具有值MyEnum_FirstItem?– Sneftel 3分钟前

@Sneftel是的,完全是– Nurbol Alpysbayev 2分钟前

 

C ++中是否有确切的数字类型?

其实,是。

std::integral_constant<int, 3>是代表值3 的类型int。它在模板元编程中使用。

也许您可以这样做。因为,虽然MyEnum_FirstItem不是它自己的类型,你可以用它来产生这样的事,就像这样:

std::integral_constant<MyEnum, MyEnum::MyEnum_FirstItem>
Run Code Online (Sandbox Code Playgroud)

所以也许:

std::tuple<int, std::integral_constant<MyEnum, MyEnum::MyEnum_FirstItem>> MyTuple;
Run Code Online (Sandbox Code Playgroud)

参考


我猜想这个枚举的目的是作为“标签”,以区别各种本来相同的元组类型,以用于记录目的(并防止代码库中的“交叉污染”)。

如果是这样,我实际上将struct为该工作创建一堆empty ,就像其他标记实现一样。

struct TagA {};
struct TagB {};

std::tuple<int, TagA> MyTuple;
Run Code Online (Sandbox Code Playgroud)

它更易于使用和阅读,并且仍然可以根据需要将它们绑定到名称空间中。