【问题标题】:BOOST_PP_SEQ_ENUM on an empty sequence空序列上的 BOOST_PP_SEQ_ENUM
【发布时间】:2013-01-03 00:27:06
【问题描述】:

我如何编写一个类似于BOOST_PP_SEQ_ENUM 的宏,但处理空序列,即

#define SEQ (a)(b)
MY_BOOST_PP_SEQ_ENUM(SEQ) // expands to a,b
#define SEQ
MY_BOOST_PP_SEQ_ENUM(SEQ) // expands to nothing

【问题讨论】:

    标签: c++ boost boost-preprocessor


    【解决方案1】:

    针对这个问题提出了一个解决方案here,命名为添加#define BOOST_PP_SEQ_ENUM_0。它被“没有空序列之类的东西”评论拒绝,但这似乎解决了我的问题。

    【讨论】:

      【解决方案2】:

      你只需要将SEQ定义为一个空序列:

      #define SEQ ()
      

      你可以直接使用BOOST_PP_SEQ_ENUM

      使用 G++ 4.7.1 和 VC 2010 与 Boost 1.47 一起工作。

      【讨论】:

      • 不幸的是,在我的情况下,我正在做类似BOOST_PP_SEQ_ENUM(TAIL SEQ) 的事情,因此在 null 情况下序列最终为空。
      【解决方案3】:

      你可以用这个:

      #define PP_SEQ_ENUM(x) BOOST_PP_CAT(PP_SEQ_ENUM_0 x, _END)
      #define PP_SEQ_ENUM_0(x) x PP_SEQ_ENUM_1
      #define PP_SEQ_ENUM_1(x) , x PP_SEQ_ENUM_2
      #define PP_SEQ_ENUM_2(x) , x PP_SEQ_ENUM_1
      #define PP_SEQ_ENUM_0_END
      #define PP_SEQ_ENUM_1_END
      #define PP_SEQ_ENUM_2_END 
      

      这应该适用于任何大小的序列(甚至大于 256 的序列)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-23
        • 2023-03-14
        • 2016-06-05
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 2022-10-20
        • 1970-01-01
        相关资源
        最近更新 更多