【问题标题】:Need help expanding a variadic macro to a sequence of stringified names and values需要帮助将可变参数宏扩展为字符串化名称和值序列
【发布时间】:2014-08-28 19:32:20
【问题描述】:

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

#define FOO(value) #value

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

我可以通过为多达 N 个参数的潜在序列创建 N 个宏来做到这一点,但是有没有办法用可变参数宏来编写它?

【问题讨论】:

    标签: c++ macros c-preprocessor


    【解决方案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

    【讨论】:

    • 这正是我想要的。谢谢!
    猜你喜欢
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多