2012-07-20 63 views
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.

我怎么能生成CONCAT宏,即使20个参数?可能是我可以使用BOOST_PP_SEQ_FOR_EACH但我不明白该怎么做?

+1

什么是这个宏的参数。你能举个例子吗?请记住,字符串连接可以由编译器本身完成,并且不使用任何宏,如果它们是字符串文字。 – iammilind 2012-07-20 08:04:58

回答

1

这取决于你的用例。

#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" 

会连接这些序列,然后stringize它。也可以简单地将每个参数串起来,因为"a" "b" "c"相当于​​。

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

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

相关问题