2

可能重复:
当 qi 返回属性时,我无法让 Boost Spirit Lex 和 Qi 一起工作

我有一个非常简单的问题,我似乎无法弄清楚。我不会费心发布完整的代码,因为我很确定你不需要看到它就知道问题所在。

假设我想解析一个看起来像这样的文件:

"dp",1,1
"dp",2,2

您希望每条数据线都是一个结构并将它们放入一个向量中。

namespace node {
    struct dp { int a; int b; };
    std::vector<dp> data;
}

我将它们添加到 Fusion。

BOOST_FUSION_ADAPT_STRUCT(obj::dp,(int,a)(int,b))
BOOST_FUSION_ADAPT_STRUCT(node::data,(std::vector<node::dp>,data))

我的解析语法如下所示:

_dp %= lit("\"dp\",") >> int >> ',' >> int;
_d %= *_dp;

我的规则是:

// in node namespace 
qi::rule<Iterator,data(),Skipper> _d;
qi::rule<Iterator,dp(),Skipper> _dp;

问题是……

_d %= *_dp;

不编译,但如果我在它前面放任何东西,它就会编译。

_d %= 'a' >> *_dp;

粗略地说,这不会解析,因为输入数据没有“a”,但你明白了。

你会如何处理这样的事情?

4

0 回答 0