我被卡在這裏...
我怎樣才能生成可變宏連接字符串
#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