【问题标题】:Adapting define/include generated struct to boost::fusion将定义/包含生成的结构调整为 boost::fusion
【发布时间】:2016-06-09 22:47:36
【问题描述】:

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

// 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 或任何其他宏调整生成的结构以提升::fusion,而无需重新输入结构中的所有字段?

【问题讨论】:

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


    【解决方案1】:

    怎么样

    #include <boost/fusion/adapted/struct.hpp>
    
    BOOST_FUSION_ADAPT_STRUCT(MyStructure,a)
    

    对于较旧的编译器/增强版本:

    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))
    

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

    【讨论】:

    • 我只提供了一个简化的示例。我不想手动重新键入结构中的字段(它包含数百个字段并定期更改)所以我想扩展宏 STRUCT_BEGIN 和其他以实现适应。
    • 我会使用我的文本编辑器功能将其快速变形为 BOOST_FUSION_DEFINE_STRUCT 版本。这将是几秒钟的工作,根本不需要我重新输入任何内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 2014-06-11
    • 2020-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多