タイトルはうまく表現できないかもしれません。正しい専門用語についてコメントしてください。
今日、私は次のことに気付きました。与えられた
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抽出します。2 番目は string のみを生成します。QWERToutT
生成されたフェニックス関数は、char_(各文字)の各一致で呼び出されると仮定します。これは、 への 5 つの割り当てを意味しout、最後のT.
これは予想される動作ですか?(boost ドキュメントの関連セクションを教えてください。)
現在(私はこれを文法のルールとして使用しています)、3番目の式でこれを修正しましたがparse、これは少しぎこちなく見えます。