2014-08-28 19 views
1

我知道在C++中我可以用#指令得到宏觀參數的名稱,例如:需要幫助擴展一個可變參數宏字符串化的名稱序列和值

#define FOO(value) #value 

我試圖瞭解如何將參數列表轉換爲包含字符串化名稱的更長列表。鑑於FOO(a, b, a+b)我想要"a", a, "b", b, "a+b", a+b

我可以通過爲最多N個參數的潛在序列創建N個宏來做到這一點,但是有沒有辦法使用可變宏來編寫這個宏?

回答

1

是的,你可以使用BOOST_PP_ENUM到每個擴展之間遍歷一個可變數據,並添加逗號:

#define FOO(...)        \ 
    BOOST_PP_ENUM(        \ 
     BOOST_PP_VARIADIC_SIZE(__VA_ARGS__), \ 
     MACRO,         \ 
     BOOST_PP_VARIADIC_TO_TUPLE(__VA_ARGS__) \ 
    ) 

#define MACRO(z, n, data) \ 
    BOOST_PP_STRINGIZE(BOOST_PP_TUPLE_ELEM(n, data)), BOOST_PP_TUPLE_ELEM(n, data) 

FOO(a, b, a+b) //"a", a , "b", b , "a+b", a+b 

ENUM採用迭代,宏和數據的計數來給宏。我們傳遞一個包含可變參數數據的PP元組。宏然後訪問索引爲n的元素。你可以看到這個工作here

+0

這正是我所期待的。謝謝! – 2014-08-28 19:48:06