我被卡在这里...
我怎样才能生成可变宏连接字符串
#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但我不明白该怎么做?
我被卡在这里...
我怎样才能生成可变宏连接字符串
#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但我不明白该怎么做?
这取决于你的用例。
这
#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)
由于您已经在使用Boost库,请尝试BOOST_PP_SEQ_CAT
(documentation)。它需要一个元素列表并简单地将它们连接在一起,即BOOST_PP_SEQ_CAT(a b c)
结果在abc
。
什么是这个宏的参数。你能举个例子吗?请记住,字符串连接可以由编译器本身完成,并且不使用任何宏,如果它们是字符串文字。 – iammilind 2012-07-20 08:04:58