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

时间:2012-07-20 08:01:01

标签: c++ c-preprocessor variadic-macros boost-preprocessor

我被困在这里......

#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 ,但我不明白该怎么做?

2 个答案:

答案 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_CATdocumentation)。它需要一个元素列表并简单地将它们连接在一起,即BOOST_PP_SEQ_CAT(a b c) 结果为abc