我知道在C ++中我可以使用#directive获取宏参数的名称,如下所示:
#define FOO(value) #value
我想弄清楚的是如何将参数列表转换为包含字符串化名称的更长列表。鉴于FOO(a, b, a+b)
,我想获得"a", a, "b", b, "a+b", a+b
。
我可以通过为最多N个参数的潜在序列创建N个宏来实现这一点,但有没有办法用可变参数宏写这个?
答案 0 :(得分: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。