2014-08-28 45 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