2012-07-20 73 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