可能重复:
I can’t get Boost Spirit Lex and Qi to work together when qi returns an attribute
我有一个非常简单的问题,我似乎无法弄明白。我不打算发布完整的代码,因为我很确定你不需要看到它就知道问题是什么。
假设我想解析一个看起来像这样的文件:
"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'但你明白了。
你会如何处理这样的事情?