如何获取枚举项的类型?

How to get type of enum item?

本文关键字:类型 枚举 何获取 获取      更新时间:2023-10-16

这里有一个新手问题...

如何制作元组类型,其中元组的项是enum的特定项?

enum class MyEnum
{
MyEnum_FirstItem
};
typedef std::tuple<int, MyEnum::MyEnum_FirstItem> MyTuple; // constant "MyEnum::MyEnum_FirstItem" is not a type name

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

附言用谷歌搜索了"获取枚举项目类型",但一无所获。

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

如何获取枚举项的类型?

MyEnum_FirstItem的类型是MyEnum.枚举器没有不同的类型。

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


你想在这里做什么?您是否正在尝试制作第二个参数只能具有值MyEnum_FirstItem的元组?– 斯内夫特尔 3 分钟前

@Sneftel 是的,正是 – 努尔博尔·阿尔皮斯巴耶夫 2 分钟前

 

在 c++ 中是否有任何确切的数字类型?

实际上,是的。

std::integral_constant<int, 3>是表示int值 3 的类型。它用于模板元编程。

也许你可以用它做点什么。因为,虽然MyEnum_FirstItem不是它自己的类型,但你可以把它包装起来产生这样的东西,像这样:

std::integral_constant<MyEnum, MyEnum::MyEnum_FirstItem>

所以也许:

std::tuple<int, std::integral_constant<MyEnum, MyEnum::MyEnum_FirstItem>> MyTuple;

(参考资料(


我猜这个枚举的目的是作为一个"标签"来区分各种其他相同的元组类型,用于文档目的(并防止代码库中的"交叉污染"(。

如果是这样,我实际上只会为作业创建一堆空struct,就像我们为其他标记实现所做的那样。

struct TagA {};
struct TagB {};
std::tuple<int, TagA> MyTuple;

它更易于使用和阅读,如果需要,您仍然可以将它们放入命名空间中。

您将类型与该类型的实例混淆了。MyEnum是一种类型,MyEnum::MyEnum_FirstItem是该类型的实例。尝试

typedef std::tuple<int, MyEnum> MyTuple; 

然后稍后您可以将MyEnum::MyEnum_FirstItem作为MyTuple中的第二个值。

只是重申一下...

附言用谷歌搜索了"获取枚举项目类型",但一无所获。

MyEnum::MyEnum_FirstItem的类型是MyEnum.