2014-03-05 32 views
0

我有以下組宏:串連嵌套的宏觀結果

macro_1(p1) 
macro_2(p1, p2) 
macro_3(p1, p2, p3) 
etc. 

現在,我不想再拍通用的宏,將評估與前面的,我試圖做到這一點,像這樣:

#define macro_x(...) macro_ ## BOOST_PP_VARIADIC_SIZE(__VA_ARGS__) (__VA_ARGS__) 

這個想法背後的是,BOOST_PP_VARIADIC_SIZE(__VA_ARGS__)評估正確的計數參數,然後將轉向正確的宏。

但是,不幸的是,我發現BOOST_PP_VARIADIC_SIZE()將被連接到macro_後被評估,導致不需要的代碼macro_BOOST_PP_VARIADIC_SIZE

有沒有辦法可以先評估0​​,然後連接到macro_

+0

神聖的莫爾!可變宏! D:我喜歡它的聲音:) – Rubens

+0

只需使用'BOOST_PP_OVERLOAD'。你目前的問題可以通過使用'BOOST_PP_CAT'而不是'##'來解決,但是這個宏已經沒有必要使用它了。 – chris

+0

@chris - 謝謝,但請將它寫爲答案,以便我可以標記它。 – TCS

回答

0

這已經爲你做BOOST_PP_OVERLOAD

#define macro_x(...) BOOST_PP_OVERLOAD(macro_, __VA_ARGS__)(__VA_ARGS__) 

你不工作的原因是因爲串聯的需求,以延遲爲宏擴大。雖然容易定義你自己的,BOOST_PP_CAT已經存在:

#define CAT_(a, b) a##b 
#define CAT(a, b) CAT_(a, b)