【问题标题】:Remove spaces from symbol从符号中删除空格
【发布时间】:2015-04-18 07:31:10
【问题描述】:

我正在使用 Boost 预处理器序列来生成 enums,所以例如我有一个类似的定义

#define DESERTS (Cheesecake)(Apple Pie)(Merengue)

现在我想做的是生成 both 一个明智的enum class 以及流输出操作。后者是可以的,但前者不是因为我不知道怎么改,比如(Apple Pie)到一个没有空间的枚举成员,即ApplePie。这可能与 Boost 预处理器魔法有关吗?

【问题讨论】:

    标签: c++ boost boost-preprocessor


    【解决方案1】:

    不完全是这个输入,但有一些解决方法。我能想到的最明智的做法就是改变输入数据,让一个多词标识符的词可以分开处理:

    #define DESSERTS ((Cheesecake))((Apple)(Pie))((Merengue))
    

    由于标识符部分现在作为序列的一部分出现,您可以通过以下方式生成枚举类和带有BOOST_PP_SEQ_FOLD_LEFT 的关联名称:

    #define DUMP_NORMAL(d, state, x) state x
    #define DUMP_CONCAT(d, state, x) BOOST_PP_CAT(state, x)
    
    #define MAKE_STRING(r, data, seq) BOOST_PP_STRINGIZE(BOOST_PP_SEQ_FOLD_LEFT(DUMP_NORMAL, , seq)),
    #define MAKE_IDENTIFIER(r, data, seq) BOOST_PP_SEQ_FOLD_LEFT(DUMP_CONCAT, , seq),
    
    enum class Desserts {
      BOOST_PP_SEQ_FOR_EACH(MAKE_IDENTIFIER, _, DESSERTS)
    };
    
    char const *const DessertNames[] = {
      BOOST_PP_SEQ_FOR_EACH(MAKE_STRING, _, DESSERTS)
    };
    

    【讨论】:

      猜你喜欢
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 2016-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      相关资源
      最近更新 更多