使用自定义分隔符提升BOOST_PP_SEQ_CAT

时间:2016-02-27 03:04:30

标签: c++ boost-preprocessor

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重新定义?

0 个答案:

没有答案