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,10和width,int,20作为字符串,但无法解析单个元素。
使用BOOST_PP_VARIADIC_SEQ_TO_SEQ转TYPES成((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)