需要帮助将可变参数宏扩展为一系列字符串化的名称和值

时间:2014-08-28 19:32:20

标签: c++ macros c-preprocessor

我知道在C ++中我可以使用#directive获取宏参数的名称,如下所示:

#define FOO(value) #value

我想弄清楚的是如何将参数列表转换为包含字符串化名称的更长列表。鉴于FOO(a, b, a+b),我想获得"a", a, "b", b, "a+b", a+b

我可以通过为最多N个参数的潜在序列创建N个宏来实现这一点,但有没有办法用可变参数宏写这个?

1 个答案:

答案 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

相关问题