标题可能表达得不太好。请评论正确的技术术语。
今天我注意到以下内容。给定
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
,这看起来有点尴尬。