【发布时间】:2017-07-30 17:22:33
【问题描述】:
我有点困惑如何定义传递给qi::parse() 的spirit::qi 规则应该省略第一个“,”的出现。说,我使用以下编译代码:
std::string out_str; int out_int;
std::string s2(",345");
bool rc = qi::parse(s2.begin(), s2.end(), qi::omit[qi::lit(",")] >>
qi::int_, out_int);
但代码没有:
bool rc = qi::parse(s2.begin(), s2.end(), qi::omit[qi::lit(",")] >>
qi::as_string[*qi::digit], out_str);
发射错误:
boost\boost_1_64_0\boost\spirit\home\qi\detail\assign_to.hpp(153): error C2440: 'static_cast': cannot convert from 'const std::string' to 'char'
有人可以帮我理解我做错了什么吗?
【问题讨论】:
-
IIRC,
lit不合成属性,所以omit似乎是多余的。 -
你是对的。但是更改为 qi::omit[qi::char_] >> qi::as_string[*qi::digit] 对我也不起作用。
-
类似地,
*qi::digit的合成属性将是一个字符序列。这已经可以分配给std::string,因此这里也没有理由使用as_string。只需将语法写成qi::lit(",") >> *qi::digit-- wandbox.org/permlink/HGd0VTxt1i6jrkAX -
工作正常,谢谢丹!
标签: boost boost-spirit-qi