Boost的预处理器库有一个整洁的宏BOOST_PP_SEQ_CAT
,以便:
#define MY_SEQUENCE (a)(b)(c)
BOOST_PP_SEQ_CAT(MY_SEQUENCE)
变为:
abc
在我对这个问题(https://stackoverflow.com/a/35664207/159145)的回答中,我给出了switch
语句,其中包含许多case
子语句作为解决方案,但遗憾的是无法定义这样的{{1}通过预处理器宏或可变参数模板阻塞。
我做了一些更多的研究,发现switch
(在此定义:https://github.com/boostorg/preprocessor/blob/develop/include/boost/preprocessor/seq/cat.hpp)最终在这里执行连接:
BOOST_PP_SEQ_CAT
是否可以通过修改此宏来允许宏化#define BOOST_PP_SEQ_CAT_O_I(a, b) a ## b
语句?
switch
e.g。
#define BOOST_PP_SEQ_CAT_O_I(ARG_A, ARG_B) case: # ARG_A ## ARG_B
变为:
switch(x) {
#define MY_SEQUENCE (1)(5)(7)
BOOST_PP_SEQ_CAT(MY_SEQUENCE)
return true;
}
问题是,我无法重新定义switch(x) {
case 1: case 5: case 7:
return true;
}
,因为它是在Boost自己的文件中定义的,修改它们似乎不是正确的解决方案。有没有办法用BOOST_PP_SEQ_CAT
输出定义我自己的BOOST_PP_SEQ_CAT
而不用Boost重新定义?