c++ - 从符号中删除空格

标签 c++ boost boost-preprocessor

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

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

现在我想做的是生成两者一个合理的枚举类以及流输出操作。后者可以,但前者不行,因为我不知道如何更改,对没有空格的枚举成员说 (Apple Pie),即 ApplePie。这可能与 Boost 预处理器魔法有关吗?

最佳答案

不完全是这个输入,但有解决方法。我能想到的最明智的是改变输入数据,使多词标识符的词可以单独处理:

#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)
};

关于c++ - 从符号中删除空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29714364/

相关文章:

c++ - 获取默认浏览器用户代理

c++ - 对数组和单个数据点使用指针之间的区别?

c++ - 使用Boost ASIO处理无套接字的TCP

c++ - XCode 项目是否需要特殊设置才能使用预编译的 boost 库?

c++ - 如何生成用于连接字符串的可变参数宏

c++ - 软件光栅化实现加速思路

c++ - 我应该将哪个 Boost 版本与支持 C++03 的编译器一起使用?

c++ - 使用 Boost 预处理器将 Any 提升到 Boost Variant

C++ 在编译时注册类成员 var

c++ - shared_ptr 魔法 :)