BOOST_PP
BOOST_PP 覚え書き。
本家:http://www.boost.org/doc/libs/1_44_0/libs/preprocessor/doc/ref.html
BOOST_PP_ENUM と BOOST_PP_ENUM_SHIFTED の違い。
BOOST_PP_ENUM は、0からカウントを始め、BOOST_PP_ENUM_SHIFTED は、1からカウントを始めます。
BOOST_PP_REPEAT(count, macro, data)
n 回数分 macro を展開する。
macro(z, 0, data) macro(z, 1, data) ... macro(z, n-1, data)
#define DECL(z, n, text) text ## n = n; BOOST_PP_REPEAT(3, DECL, int x) // int x0 = 0; int x1 = 1; int x2 = 2;
※ macro の後ろに"," はつかない。
BOOST_PP_REPEAT_FROM_TO(first, last, macro, data)
first から last-1 まで、macro を展開する。
macro(z, first, data) macro(z, first+1, data) ... macro(z, last-1, data)
#define DECL(z, n, text) text ## n = n; BOOST_PP_REPEAT_FROM_TO(3, 6, DECL, int x) // int x3 = 3; int x4 = 4; int x5 = 5;
※ macro の後ろに"," はつかない。
BOOST_PP_ENUM_SHIFTED_PARAMS(n, d)
最後尾に数値を連結する。
d ## 1, d ## 2, …, d ## (n-1)
BOOST_PP_ENUM_SHIFTED_PARAMS(5, d); // d1, d2, d3, d4
BOOST_PP_ENUM_BINARY_PARAMS(n, d1, d2)
BOOST_PP_ENUM_SHIFTED_PARAMS の2つの引数を受け取る版。
d1 ## 1 d2 ## 1, d1 ## 2 d2 ## 2, …, d1 ## n-1 d2 ## n-1
BOOST_PP_ENUM_BINARY_PARAMS(4, const T, &t) // const T1 &t1, const T2 &t2, const T3 &t3
BOOST_PP_CAT(a, b)
a ## b
に展開します。
BOOST_PP_CAT(int, 1) // int1