我被困在这里......
#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 ,但我不明白该怎么做?
答案 0 :(得分:2)
这取决于你的用例。
此
#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)
答案 1 :(得分:1)
由于您已经在使用Boost库,请尝试BOOST_PP_SEQ_CAT
(documentation)。它需要一个元素列表并简单地将它们连接在一起,即BOOST_PP_SEQ_CAT(a b c)
结果为abc
。