C++ 增强字符串属性兼容性
标题可能表达得不太清楚。请评论正确的技术术语 今天我注意到以下几点。给定C++ 增强字符串属性兼容性,c++,boost-spirit,C++,Boost Spirit,标题可能表达得不太清楚。请评论正确的技术术语 今天我注意到以下几点。给定 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::cha
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
中。第二个只产生字符串T
我假设生成的phoenix函数在char\uuu
(每个字符)的每个匹配上都被调用,这意味着有五个赋值给out
,最后一个赋值是T
这是预期的行为吗?(请指向boost文档中的相关部分。)
目前(我将此作为语法规则使用)我通过第三个
解析中的表达式修复了此问题,这看起来有点尴尬。这是由于以下原因而导致的预期行为。您的第二个语法将被评估为:
+ ( boost::spirit::qi::char_[ boost::phoenix::ref( out ) = boost::spirit::_1 ] )
你所期待的是:
(+boost::spirit::qi::char_)[ boost::phoenix::ref( out ) = boost::spirit::_1 ]
第二行实际上不起作用,因为(+boost::spirit::qi::char_)的类型是std::vector
,所以您需要像第三个语法一样将该向量转换为字符串。是的,谢谢。让我的精神围绕着我,让我忘记它仍然是C++不时。我尝试了第二个表达式,并希望能够像在我的示例中的第一个解析调用中一样,使用相同的魔法将解析为std::string
。