Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 增强字符串属性兼容性_C++_Boost Spirit - Fatal编程技术网

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