Dies ist für die C Präprozessor-Experten:
Wie kann ich eine enum
mit einer Liste einiger Bezeichner und später bei der Switch-Anweisung prüfen, ob ein Bezeichner in der Liste enthalten war?
Ein Beispiel dafür, was ich brauche:
typedef enum { e1, e2, e3, e4, e5, e6 } e;
e x;
switch (x) {
#if DECLARED_IN_ENUM (e1)
case e1 : ...
#endif
/* etc. */
}
Ich dachte daran, eine Boost-Sequenz zu verwenden und sie in eine kommagetrennte Liste in der Aufzählung zu erweitern, aber wie kann ich später überprüfen, ob die Sequenz ein bestimmtes Token enthält?
EDIT : Was ich mit Boost erreichen konnte, ist:
#define e1 e1
#define e2 e2
#define e3 e3
#define e4 e4
#define e5 e5
#define e6 e6
#define E (e1)(e2)(e3)(e4)(e5)(e6)
typedef enum { BOOST_PP_SEQ_ENUM(E) } e;
e x;
switch (x) {
#if defined (e1)
case e1 : ...
#endif
/* etc. */
}
Das ist nicht sehr schön, und ich würde etwas vorziehen wie:
#define E (e1)(e2)(e3)(e4)(e5)(e6)
typedef enum { BOOST_PP_SEQ_ENUM(E) } e;
e x;
switch (x) {
#if BOOST_PP_SEQ_CONTAINS (e1,E)
case e1 : ...
#endif
/* etc. */
}
aber wie konnte BOOST_PP_SEQ_CONTAINS
umgesetzt werden?