L'itération sur les non-incrémentale Enum

Avant de vous demander, j'ai regardé et regardé pour cette SORTE, et ne peut pas trouver une réponse solide.

J'ai besoin d'être en mesure de dynamiquement itérer sur un enum qui a des non-valeurs incrémentielles, à titre d'exemple:

typedef enum {
CAPI_SUBTYPE_NULL = 0,               /* Null subtype. */
CAPI_SUBTYPE_DIAG_DFD = 1,           /* Data Flow diag. */
CAPI_SUBTYPE_DIAG_ERD = 2,           /* Entity-Relationship diag. */
CAPI_SUBTYPE_DIAG_STD = 3,           /* State Transition diag. */
CAPI_SUBTYPE_DIAG_STC = 4,           /* Structure Chart diag. */
CAPI_SUBTYPE_DIAG_DSD = 5,           /* Data Structure diag. */
CAPI_SUBTYPE_SPEC_PROCESS = 6,       /* Process spec. */
CAPI_SUBTYPE_SPEC_MODULE = 7,        /* Module spec. */
CAPI_SUBTYPE_SPEC_TERMINATOR = 8,    /* Terminator spec. */
CAPI_SUBTYPE_DD_ALL = 13,            /* DD Entries (All). */
CAPI_SUBTYPE_DD_COUPLE = 14,         /* DD Entries (Couples). */
CAPI_SUBTYPE_DD_DATA_AREA = 15,      /* DD Entries (Data Areas). */
CAPI_SUBTYPE_DD_DATA_OBJECT = 16,    /* DD Entries (Data Objects). */
CAPI_SUBTYPE_DD_FLOW = 17,           /* DD Entries (Flows). */
CAPI_SUBTYPE_DD_RELATIONSHIP = 18,   /* DD Entries (Relationships). */
CAPI_SUBTYPE_DD_STORE = 19,          /* DD Entries (Stores). */
CAPI_SUBTYPE_DIAG_PAD = 35,          /* Physical architecture diagram. */
CAPI_SUBTYPE_DIAG_BD  = 36,          /* Behaviour diagram. */
CAPI_SUBTYPE_DIAG_UCD = 37,          /* UML Use case diagram. */
CAPI_SUBTYPE_DIAG_PD  = 38,          /* UML Package diagram. */
CAPI_SUBTYPE_DIAG_COD = 39,          /* UML Collaboration diagram. */
CAPI_SUBTYPE_DIAG_SQD = 40,          /* UML Sequence diagram. */
CAPI_SUBTYPE_DIAG_CD  = 41,          /* UML Class diagram. */
CAPI_SUBTYPE_DIAG_SCD = 42,          /* UML State chart. */
CAPI_SUBTYPE_DIAG_ACD = 43,          /* UML Activity chart. */
CAPI_SUBTYPE_DIAG_CPD = 44,          /* UML Component diagram. */
CAPI_SUBTYPE_DIAG_DPD = 45,          /* UML Deployment diagram. */
CAPI_SUBTYPE_DIAG_PFD = 47,          /* Process flow diagram. */
CAPI_SUBTYPE_DIAG_HIER = 48,         /* Hierarchy diagram. */
CAPI_SUBTYPE_DIAG_IDEF0 = 49,        /* IDEF0 diagram. */
CAPI_SUBTYPE_DIAG_AID = 50,          /* AID diagram. */
CAPI_SUBTYPE_DIAG_SAD = 51,          /* SAD diagram. */
CAPI_SUBTYPE_DIAG_ASG = 59           /* ASG diagram. */
} CAPI_SUBTYPE_E ;

La raison pour laquelle je voudrais pouvoir faire, c'est parce que l'enum est donné dans une API (qui je ne peux pas changer, évidemment) et que vous préférez être en mesure, quelle que soit la version de l'API, être en mesure d'effectuer une itération sur ces valeurs.

N'importe quelle direction est apprécié.

  • C++ ne fournit pas de support direct pour itérer sur les énumérations. Farcir dans un std::vector ou std::array.
  • Je déteste quand les bibliothèques utilisent des énumérations de ce genre. Le vecteur des recommandations sont solides.
  • En plus de mon commentaire précédent (et merci à iammilind pour me motiver dans une autre direction), je voudrais suggérer à l'aide de initializer_list sur vector ou array puisque c'est la garantie d'être un littéral.
  • voir la accepté de répondre à stackoverflow.com/questions/15451382/...