ここで行き詰まりました...
#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を使用できるかもしれませんが、その方法がわかりませんか?
ここで行き詰まりました...
#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を使用できるかもしれませんが、その方法がわかりませんか?
ユースケースによって異なります。
これ
#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)
すでに Boost ライブラリを使用しているので、試してみてくださいBOOST_PP_SEQ_CAT
(ドキュメント)。要素のリストを取り、それらを単純に連結します。つまり、BOOST_PP_SEQ_CAT(a b c)
結果は になりabc
ます。