为 Boost Fusion 适配一个空结构

Posted

技术标签:

【中文标题】为 Boost Fusion 适配一个空结构【英文标题】:Adapting an empty struct for Boost Fusion 【发布时间】:2013-09-16 15:17:09 【问题描述】:

我有一个空结构:

struct MyStruct ;

我想调整它以供 Boost Fusion 使用。通常我会使用BOOST_FUSION_ADAPT_STRUCT,但是这个宏需要两个参数来命名结构并列出它的字段。有没有办法告诉宏字段不存在?

动机:我正在使用 Boost Spirit 来定义解析器。该结构用于boost::variant,然后将其传递给boost::apply_visitor()。给定boost::fusion::for_each() 处理的变体中的其他一些项目。

【问题讨论】:

【参考方案1】:

我尝试将 /**/ 作为第二个参数传递并为我编译 (g++-4.6.2)。

    BOOST_FUSION_ADAPT_STRUCT(MyStruct, /**/);

【讨论】:

Visual C++ v140 确实拒绝吃它。 @LoftyLion 不幸的是,我没有 MSVC 来测试这个,如果你提出一个新问题可能会更好。【参考方案2】:

尝试传递BOOST_PP_EMPTY。不能保证它会起作用,但考虑到实现它似乎很有可能。

【讨论】:

我收到一个错误'BOOST_PP_IIF_0' does not name a type。不过还是谢谢你的建议。

以上是关于为 Boost Fusion 适配一个空结构的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 boost :: 适配器链的 boost 范围获取 std::list

访问 boost fusion map 字段名称

Boost Fusion Types offsetof

DesignPattern - 适配器模式结构型

DesignPattern - 适配器模式结构型

片段中的 Listview 适配器给出空指针异常