c++ - 使定义/包含生成的结构适应 boost::fusion

标签 c++ boost c-preprocessor boost-fusion

我有一个以这种方式定义的遗留结构:

// file:MyStructure_def.h
STRUCT_BEGIN
STRUCT_FIELD(int,x)
STRUCT_END
// EOF

// file: MyStructure.h
#define STRUCT_BEGIN struct MyStructure{
#define STRUCT_FIELD(a,b) a b;
#define STRUCT_END };
#include "MyStructure_def.h"
// EOF

是否可以使用 BOOST_FUSION_ADAPT_STRUCT 或任何其他宏来调整这样一个生成的结构以适应 boost::fusion 而无需重新键入结构中的所有字段?

最佳答案

怎么样

#include <boost/fusion/adapted/struct.hpp>

BOOST_FUSION_ADAPT_STRUCT(MyStructure,a)

对于旧的编译器/boost 版本:

BOOST_FUSION_ADAPT_STRUCT(MyStructure,(a,b))

另请参阅 http://www.boost.org/doc/libs/1_60_0/libs/fusion/doc/html/fusion/adapted/define_struct.html这会使您自己的宏变得多余。

#define NONS
BOOST_FUSION_DEFINE_STRUCT(
    (NONS), MyStructure,
    (a, b))

它定义了结构/以及/适应它

关于c++ - 使定义/包含生成的结构适应 boost::fusion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35656480/

相关文章:

c++ - API 返回类型——将智能指针强加给用户?

java - 内部调用另一个 dll 的 JNI DLL 的依赖项

c++ - 在 boost::format 中使用 * 宽度和精度说明符

objective-c - 有什么方法可以告诉我从哪个类/方法调用了一个方法?

c - 带有#include 指令的尾随字符

根据函数参数进行条件编译?

c++ - 使用 vlc-qt 拉伸(stretch)视频播放器?

c++ - <regex> VS10 中文件名的正则表达式格式有什么问题?

c++ - 是否可以将 bind() *this 绑定(bind)到类成员函数以回调 C API

c++ - 从源代码创建 boost 库