如何为连接字符串生成可变宏

How can i generate variadic macro for concatenate string

本文关键字:字符串 连接      更新时间:2023-10-16

我被困在这里了

#define CONCAT(a,b) BOOST_PP_STRINGIZE(BOOST_PP_CAT(a,b))
#define CONCAT1(a,b,c) CONCAT(CONCAT(a,b),c) and so on.

即使有20个参数,我如何生成CONCAT宏?也许我可以使用BOOST_PP_SEQ_FOR_EACH,但我不知道该怎么做?

这取决于您的用例。

这个

#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/stringize.hpp>
#include <boost/preprocessor/seq/for_each.hpp>
#define SEQ (a)(b)(c)
BOOST_PP_STRINGIZE(BOOST_PP_SEQ_CAT(SEQ)) // "abc"

将连接序列,然后将其字符串化。也可以简单地将每个参数字符串化,因为"a" "b" "c"等效于"abc"

#define MY_STRINGIZE(r, data, elem) BOOST_PP_STRINGIZE(elem)
BOOST_PP_SEQ_FOR_EACH(MY_STRINGIZE, _, SEQ)

由于您已经在使用Boost库,请尝试BOOST_PP_SEQ_CAT(文档)。它采用元素列表,并简单地将它们连接在一起,即BOOST_PP_SEQ_CAT(a b c)得到CCD_ 5。