从符号中删除空格
Remove spaces from symbol
我正在使用 Boost 预处理器序列来生成 enum
s,所以例如我有一个像
这样的定义
#define DESERTS (Cheesecake)(Apple Pie)(Merengue)
现在我想做的是生成 一个合理的 enum class
以及流输出操作。后者可以,但前者不行,因为我不知道如何更改,对没有 space 的枚举成员说 (Apple Pie)
,即 ApplePie
。这可能与 Boost 预处理器魔法有关吗?
不完全是这个输入,但有解决方法。我能想到的最明智的是改变输入数据,让多词标识符的词可以单独处理:
#define DESSERTS ((Cheesecake))((Apple)(Pie))((Merengue))
由于标识符部分现在作为序列的一部分出现,您可以通过这种方式生成枚举 class 和与 BOOST_PP_SEQ_FOLD_LEFT
关联的名称:
#define DUMP_NORMAL(d, state, x) state x
#define DUMP_CONCAT(d, state, x) BOOST_PP_CAT(state, x)
#define MAKE_STRING(r, data, seq) BOOST_PP_STRINGIZE(BOOST_PP_SEQ_FOLD_LEFT(DUMP_NORMAL, , seq)),
#define MAKE_IDENTIFIER(r, data, seq) BOOST_PP_SEQ_FOLD_LEFT(DUMP_CONCAT, , seq),
enum class Desserts {
BOOST_PP_SEQ_FOR_EACH(MAKE_IDENTIFIER, _, DESSERTS)
};
char const *const DessertNames[] = {
BOOST_PP_SEQ_FOR_EACH(MAKE_STRING, _, DESSERTS)
};
我正在使用 Boost 预处理器序列来生成 enum
s,所以例如我有一个像
#define DESERTS (Cheesecake)(Apple Pie)(Merengue)
现在我想做的是生成 一个合理的 enum class
以及流输出操作。后者可以,但前者不行,因为我不知道如何更改,对没有 space 的枚举成员说 (Apple Pie)
,即 ApplePie
。这可能与 Boost 预处理器魔法有关吗?
不完全是这个输入,但有解决方法。我能想到的最明智的是改变输入数据,让多词标识符的词可以单独处理:
#define DESSERTS ((Cheesecake))((Apple)(Pie))((Merengue))
由于标识符部分现在作为序列的一部分出现,您可以通过这种方式生成枚举 class 和与 BOOST_PP_SEQ_FOLD_LEFT
关联的名称:
#define DUMP_NORMAL(d, state, x) state x
#define DUMP_CONCAT(d, state, x) BOOST_PP_CAT(state, x)
#define MAKE_STRING(r, data, seq) BOOST_PP_STRINGIZE(BOOST_PP_SEQ_FOLD_LEFT(DUMP_NORMAL, , seq)),
#define MAKE_IDENTIFIER(r, data, seq) BOOST_PP_SEQ_FOLD_LEFT(DUMP_CONCAT, , seq),
enum class Desserts {
BOOST_PP_SEQ_FOR_EACH(MAKE_IDENTIFIER, _, DESSERTS)
};
char const *const DessertNames[] = {
BOOST_PP_SEQ_FOR_EACH(MAKE_STRING, _, DESSERTS)
};