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