我不明白這兩個運營商之間的區別。讓我們舉一個例子來解析像"AA,BB,CC,DD"
這樣的輸入到字符串向量中。Boost.Spirit:運營商之間的區別「%=」和「=」
namespace qi = boost::spirit::qi;
class my_grammar : public qi::grammar<string::const_iterator, string()>
{
public:
my_grammar() : base_type(start) {
using qi::_1;
using qi::char_;
start = *(char_ - qi::lit(','));
}
qi::rule<string::const_iterator, string()> start;
};
據我所知,a %= b
相當於a = b[_val = _1]
。這很清楚。但另一方面,解析器*(char_ - qi::lit(','))
具有類型std::string
的合成屬性,匹配的序列將被分配到該屬性。使用start = *(char_ - qi::lit(','))
的結果是一樣的。那麼使用運營商%=
的情況如何?
這是一個常見問題http://stackoverflow.com/search?q=user%3A85371+automatic+propagation+assignment - 另請參閱http://boost-spirit.com/home/2010/01/15/how- do-rules-propagate-attributes /,http://boost-spirit.com/home/articles/attribute_handling/attribute-propagation-and-attribute-compatibility/ :) – sehe