如何按与值索引相关的项目索引返回枚举?

问题描述

如何通过“项目索引”而不是“值索引”对枚举进行索引:

“价值索引”(对我正在做的事情没有用):

eSerialBauds eBaud = static_cast<eSerialBauds>(1200); // yields eBaud1200

我想要“项目索引”:(如何获得以下内容?)

eSerialBauds eBaud = static_cast<eSerialBauds>(3); // to yield eBaud1200

// values (from WinBase.h)
#define CBR_110             110
#define CBR_300             300
#define CBR_600             600
#define CBR_1200            1200
#define CBR_2400            2400



enum class eSerialBauds
{
  eBaud110 = CBR_110,eBaud300 = CBR_300,eBaud600 = CBR_600,eBaud1200 = CBR_1200,eBaud2400 = CBR_2400,}

请注意,我从另一个班级获得了这个枚举班级。有许多。所以我必须用别人给我的东西来工作。

我确实写了一个变通方法,但如果有一种更优雅的方法来获得结果会很好。

解决方法

只需设置一个包含枚举值的数组,如下所示:

static const eSerialBauds bauds_by_index [] = { eBaud110,eBaud300,eBaud600,eBaud1200,eBaud2400 };

然后你可以这样做,例如:

eSerialBauds baud = bauds_by_index [3];
,

最简单的方法是构建一个枚举值数组。

static constexpr auto sBaudIndex = std::array{eBaud100,eBaud200,eBaud2400);

然后你索引那个数组。它很脆弱,但我知道没有办法让编译器为您枚举枚举值。

如果不需要,可以跳过 enum,只需使用数组中的 WinBase 值

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...