【问题标题】:How to return an enum by item index as apposed to value index? [duplicate]如何按项目索引返回与值索引相对的枚举? [复制]
【发布时间】:2021-04-14 22:30:15
【问题描述】:

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

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

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,
}

请注意,我是从另一个班级获得这个枚举班级的。有许多。所以我必须使用给我的东西。

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

【问题讨论】:

  • nvm 我读得太快了。我撤回我的重复投票。这不是Conversion from int to enum class type possible?
  • 我的问题对其他人来说足够清楚吗?
  • 我想是的,我只是粗心,但留下了评论,所以没有其他人也投票给它。
  • 我使用的目标使用enum而不是enum class,但基本上是同一个问题。如果您认为这不是一个合适的目标,请联系我。
  • 问题已关闭,但如果您想保持相同的语法,您可以这样做:replit.com/@Ranoiaetep/ExperiencedDeadTerabyte#main.cpp

标签: c++ enum-class


【解决方案1】:

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

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

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

eSerialBauds baud = bauds_by_index [3];

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • std::array 需要一个模板参数作为大小,您可以将其设为constexpr
    猜你喜欢
    • 2011-12-16
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多