标题可能表达得不太好。请评论正确的技术术语。
今天我注意到以下内容。给定
const std::string in( "QWERT" );
std::string out;
boost::spirit::qi::parse( in.begin(), in.end(),
+boost::spirit::qi::char_, out );
boost::spirit::qi::parse( in.begin(), in.end(),
+boost::spirit::qi::char_[ boost::phoenix::ref( out ) =
boost::spirit::_1 ] );
boost::spirit::qi::parse( in.begin(), in.end(),
boost::spirit::as_string[ +boost::spirit::qi::char_ ]
[ boost::phoenix::ref( out ) = boost::spirit::_1 ] );
第一个按预期parse将字符串提取QWERT到。out第二个只产生 string T。
我假设生成的 phoenix 函数在每次匹配char_(即每个字符)时被调用,这意味着对 的五个分配out,最后一个是T。
这是预期的行为吗?(请指出我在 boost 文档中的相关部分。)
目前(我在语法中使用这个作为规则)我通过第三个中的表达式修复了这个parse,这看起来有点尴尬。