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