#include <iostream>
using namespace std;
#include <boost/preprocessor.hpp>
#define M2(r, data, elem) elem
#define M1(r, data, elem) BOOST_PP_SEQ_FOR_EACH(M2, data, elem)
int main()
{
// M1のBOOST_PP_SEQ_FOR_EACHが解釈されない
cout << BOOST_PP_STRINGIZE(BOOST_PP_SEQ_FOR_EACH(M1, data, ((1)(2)(3))((4)(5)(6)))) << endl;
// M1を直接呼ぶと、~SEQ_FOR_EACHは解釈されている
cout << BOOST_PP_STRINGIZE(M1(_, data, (10)(11)(12))) << endl;
// BOOST_PP_SEQ_FOR_EACHで呼び出したマクロ中で、BOOST_PP_SEQ_FOR_EACHは使えないのか?
}
とすると、
BOOST_PP_SEQ_FOR_EACH(M2, data, (1)(2)(3)) BOOST_PP_SEQ_FOR_EACH(M2, data, (4)(5)(6)) 10 11 12
上のコードはテストの為に単純化してて、これくらいならBOOST_PP_SEQ_FOR_EACH_PRODUCT
使えばいけるんじゃないかなぁと思うけど、
内側のsequencesの特定の要素だけ別の処理を行いたい、といった場合は駄目だろうし。
うーん…………何でだろう?