看板 C_and_CPP 關於我們 聯絡資訊
以下列程式為例 #include <boost/preprocessor/tuple/elem.hpp> #include <boost/preprocessor/arithmetic/dec.hpp> #include <boost/preprocessor/arithmetic/add.hpp> #include <boost/preprocessor/control/while.hpp> #define p(d,s) BOOST_PP_TUPLE_ELEM(2,1,s) #define op(d,s)(\ BOOST_PP_ADD_D(d,BOOST_PP_TUPLE_ELEM(2,0,s),BOOST_PP_DEC(BOOST_PP_TUPLE_ELEM(2,1,s))),\ BOOST_PP_DEC(BOOST_PP_TUPLE_ELEM(2,1,s))) #define op1(d,s) (BOOST_PP_TUPLE_ELEM(2,0,BOOST_PP_WHILE_##d(p,op,s)),BOOST_PP_DEC(BOOST_PP_TUPLE_ELEM(2,1,s))) #define x(n) BOOST_PP_TUPLE_ELEM(2,0,BOOST_PP_WHILE(p,op1,(n,n))) x(2)//展開為3 /* 最外層的BOOST_PP_WHILE若沒指定d值,會代換為BOOST_PP_WHILE_1 x(2) | v BOOST_PP_TUPLE_ELEM_2_0 BOOST_PP_WHILE_1(p,op1,(2,2))//要傳給p跟op1的d值為2 | v BOOST_PP_TUPLE_ELEM_2_0 BOOST_PP_WHILE_3(p,op,(BOOST_PP_TUPLE_ELEM_2_0 BOOST_PP_WHILE_2(p,op,(2,2)),1)) | ^ | 外層的p v BOOST_PP_TUPLE_ELEM_2_0 BOOST_PP_WHILE_3(p,op,(3,1)) | v 3 d值的作用就是在此次的WHILE展開中 決定下一個BOOST_PP_WHILE可以使用的值 */ x(3)//展開為7 /* x(3) | v BOOST_PP_TUPLE_ELEM_2_0 BOOST_PP_WHILE_1(p,op1,(3,3)) | v BOOST_PP_TUPLE_ELEM_2_0 BOOST_PP_WHILE_4(p,op, (BOOST_PP_TUPLE_ELEM_2_0 BOOST_PP_WHILE_3(p,op,(BOOST_PP_TUPLE_ELEM_2_0 BOOST_PP_WHILE_2(p,op,(3,3)),2)),1)) */ ---------------------以下指定d值-------------------------------------------------- #include <boost/preprocessor/tuple/elem.hpp> #include <boost/preprocessor/arithmetic/dec.hpp> #include <boost/preprocessor/arithmetic/add.hpp> #include <boost/preprocessor/control/while.hpp> #define p(d,s) BOOST_PP_TUPLE_ELEM(2,1,s) #define op(d,s)(\ BOOST_PP_ADD_D(d,BOOST_PP_TUPLE_ELEM(2,0,s),BOOST_PP_DEC(BOOST_PP_TUPLE_ELEM(2,1,s))),\ BOOST_PP_DEC(BOOST_PP_TUPLE_ELEM(2,1,s))) #define op1(d,s) (BOOST_PP_TUPLE_ELEM(2,0,BOOST_PP_WHILE_##d(p,op,s)),BOOST_PP_DEC(BOOST_PP_TUPLE_ELEM(2,1,s))) #define x(n,d) BOOST_PP_TUPLE_ELEM(2,0,BOOST_PP_WHILE_##d(p,op1,(n,n))) x(3,2)//展開為7 /* d的初始值給2,所以直接從BOOST_PP_WHILE_2開始 x(3,2) | v BOOST_PP_TUPLE_ELEM_2_0 BOOST_PP_WHILE_2(p,op1,(3,3)) | v BOOST_PP_TUPLE_ELEM_2_0 BOOST_PP_WHILE_5(p,op, (BOOST_PP_TUPLE_ELEM_2_0 BOOST_PP_WHILE_4(p,op,(BOOST_PP_TUPLE_ELEM_2_0 BOOST_PP_WHILE_3(p,op,(3,3)),2)),1)) */ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.130.247.105 ※ 編輯: loveflames 來自: 220.130.247.105 (03/11 16:14)