Я не понимаю разницы между этими двумя операторами. Возьмем пример разбора входных данных, например "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(','))
тот же. Итак, что в случае использования оператора %=
?
Это faq 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