簡體   English   中英

有沒有辦法在C ++中找到枚舉的基數(大小)?

[英]Is there a way to find the cardinality (size) of an enum in C++?

可以編寫一個返回枚舉中元素數量的函數嗎? 例如,假設我已定義:

enum E {x, y, z};

然后f(E)將返回3。

不。

如果有,你不會看到這樣的代碼:

enum E {
  VALUE_BLAH,
  VALUE_OTHERBLAH,
  ...
  VALUE_FINALBLAH,
  VALUE_COUNT
}

請注意,此代碼也是(討厭的)解決方案的提示 - 如果添加最終的“guard”元素,並且沒有明確說明枚舉字段的值,那么最后一個“COUNT”元素將具有該值你正在尋找 - 這是因為枚舉數從零開始:

enum  B {
  ONE,   // has value = 0
  TWO,   // has value = 1
  THREE, // has value = 2
  COUNT  // has value = 3 - cardinality of enum without COUNT
}

有方法,但你必須工作......有點:)

基本上你可以用宏來獲取它。

DEFINE_NEW_ENUM(MyEnum, (Val1)(Val2)(Val3 = 6));

size_t s = count(MyEnum());

它是如何工作的 ?

#include <boost/preprocessor/seq/enum.hpp>
#include <boost/preprocessor/seq/size.hpp>

#define DEFINE_NEW_ENUM(Type_, Values_)\
  typedef enum { BOOST_PP_SEQ_ENUM(Values_) } Type_;\
  size_t count(Type_) { return BOOST_PP_SEQ_SIZE(Values_); }

請注意,長度也可以是模板特化或任何東西。 我不了解你,但我真的很喜歡BOOST_PP中“序列”的表現力;)

不,這是一個VFAQ,答案是否定的!

無論如何,並非沒有克服。

即使是關於最終條目的那個技巧也只有在沒有值是非默認值的情況下才有效。 例如,

enum  B {
         ONE,   // has value = 0
         TWO,   // has value = 1
         THREE=8, // because I don't like threes
         COUNT  // has value = 9 
        }

不可以。首先,你不能把類型作為參數(只是類型的實例)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM