使用 Boost Preprocessor 解析元素序列

bha*_*esh 4 c++ boost boost-preprocessor

我定义了一个宏,它是

#define TYPES (height,int,10)(width,int,20)
Run Code Online (Sandbox Code Playgroud)

如何使用像这样的 Boost Preprocessor 扩展这个宏?

int height = 10;
int width = 20;
Run Code Online (Sandbox Code Playgroud)

最多我能得到的是height,int,10width,int,20作为字符串,但无法解析单个元素。

Que*_*tin 5

使用BOOST_PP_VARIADIC_SEQ_TO_SEQTYPES((height,int,10))((width,int,20))处理之前,使BOOST_PP_SEQ_FOR_EACH不上呛:

#define MAKE_ONE_VARIABLE(r, data, elem) \
    BOOST_PP_TUPLE_ELEM(1, elem) BOOST_PP_TUPLE_ELEM(0, elem) = BOOST_PP_TUPLE_ELEM(2, elem);

#define MAKE_VARIABLES(seq) \
    BOOST_PP_SEQ_FOR_EACH(MAKE_ONE_VARIABLE, ~, BOOST_PP_VARIADIC_SEQ_TO_SEQ(seq))
Run Code Online (Sandbox Code Playgroud)

用法:

#define TYPES (height,int,10)(width,int,20)

int main() {
    MAKE_VARIABLES(TYPES)
}
Run Code Online (Sandbox Code Playgroud)

被预处理为:

int main() {
    int height = 10; int width = 20;
}
Run Code Online (Sandbox Code Playgroud)

在 Coliru 上现场观看