BOOST_FUSION_ADAPT_STRUCT没有采用正确数量的参数

时间:2011-08-05 18:36:43

标签: c++ boost boost-spirit-qi boost-fusion

我使用Boost :: Spirit将一些文本解析为结构。这需要使用BOOST_FUSION_ADAPT_STRUCT来解析文本并直接存储到结构中。我知道宏有两个参数:结构名称为第一个arg,所有结构成员为第二个参数。而我正在传递那些2.但是我收到了编译错误,

error: macro "BOOST_FUSION_ADAPT_STRUCT_FILLER_0" passed 3 arguments, but takes just 2

以下是代码段。如果您需要整个代码,请告诉我。

感谢。

namespace client
{
    namespace qi = boost::spirit::qi;
    namespace ascii = boost::spirit::ascii;
    namespace phoenix = boost::phoenix;

    struct Dir_Entry_Pair
    {
        std::string                 dir;
        std::string                 value1;
        std::pair<std::string, std::string> keyw_value2;
    };
}

BOOST_FUSION_ADAPT_STRUCT(
    client::Dir_Entry_Pair,
    (std::string, dir)
    (std::string, value1)
    (std::pair< std::string, std::string >, keyw_value2))

这是我要解析的规则,

qi::rule<Iterator, Dir_Entry_Pair()> ppair  =   dir
                                                >>  '/'
                                                >>  entry
                                                >> -(keyword >> entry);

1 个答案:

答案 0 :(得分:12)

问题很可能是std::pair<std::string,std::string>

问题是该类型中有一个逗号,它将对宏扩展造成严重破坏(使用列表的最后一个元素时)。

您应该尝试将类型包装在自己的括号中。