这是给C预处理器专家的:
如何声明一个enum
带有一些标识符的列表,然后在 switch 语句检查列表中是否包含标识符?
我需要的示例:
typedef enum { e1, e2, e3, e4, e5, e6 } e;
e x;
switch (x) {
#if DECLARED_IN_ENUM (e1)
case e1 : ...
#endif
/* etc. */
}
我想过使用 Boost 序列并将其扩展为枚举中的逗号分隔列表,但是我以后如何检查该序列是否包含某个标记?
编辑:我能用 Boost 做的是:
#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. */
}
这不是很漂亮,我更喜欢这样的东西:
#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. */
}
但如何BOOST_PP_SEQ_CONTAINS
实施?