2

我被困在这里...

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

4

2 回答 2

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)
于 2012-07-20T09:23:47.630 回答
1

由于您已经在使用 Boost 库,请尝试BOOST_PP_SEQ_CAT文档)。它需要一个元素列表并将它们简单地连接在一起,即BOOST_PP_SEQ_CAT(a b c) 结果为abc.

于 2012-07-20T09:12:29.423 回答