我有以下代碼:升壓預處理器不擴大
#include <boost/preprocessor.hpp>
#define ARGS(r, data, elem) \
BOOST_PP_COMMA_IF(BOOST_PP_SUB(r, 2)) \
BOOST_PP_SEQ_ELEM(0, elem) BOOST_PP_SEQ_ELEM(1, elem)
#define DEF_FUN(name, args) void name(BOOST_PP_SEQ_FOR_EACH(ARGS,,args));
#define DEF_FUNCTIONS_ELEM(r, data, elem) DEF_FUN(BOOST_PP_SEQ_ELEM(0, elem), BOOST_PP_SEQ_ELEM(1, elem))
#define DEF_FUNCTIONS(funSeqs) \
BOOST_PP_SEQ_FOR_EACH(DEF_FUNCTIONS_ELEM,, funSeqs)
DEF_FUNCTIONS_ELEM(2,, (fun0) (((int)(arg0)) ((char)(arg1))))
DEF_FUNCTIONS
(
((fun0) (((int)(arg0)) ((char)(arg1))))
((fun1) (((char)(arg0)) ((long)(arg1)) ((short)(arg2))))
((fun3)())
)
當我此進行預處理用鏘3.2或g ++ 4.6.3,我得到:
void fun0(int arg0 , char arg1);
void fun0(BOOST_PP_SEQ_FOR_EACH(ARGS,,((int)(arg0)) ((char)(arg1))));
void fun1(BOOST_PP_SEQ_FOR_EACH(ARGS,,((char)(arg0)) ((long)(arg1)) ((short)(arg2))));
void fun3(BOOST_PP_SEQ_FOR_EACH(ARGS,,));
(I加入行分解爲清晰度)
問題是,爲什麼內部BOOST_PP_SEQ_FOR_EACH沒有擴展?
再次傳遞此輸出擴展了預期結果。
編輯:經過大量的搜索後,我讀了一個宏不會展開,如果它被調用兩次,我想這就是爲什麼。
編輯:我應該使用PP_SEQ_FOR_EACH_I,R不意味着被用作下標。
現在我做蟒蛇最代碼生成,只有在宏小東西。 – chila 2015-04-15 15:17:37