передать атрибут дочернего правила в духе буста

У меня есть два правила с одним и тем же атрибутом.

Можно ли передать атрибут правила matrix_ дочернему правилу matrixBlock_? Я хочу, чтобы директива повтора не создавала атрибут вектора формы & lt; & GT ;. Вместо этого он должен просто продолжать записывать в атрибут matrix_ (количество раз numBlocks). Я попытался передать атрибут как унаследованный атрибут в дочернее правило, и он компилируется (см. Ниже). Но я получаю несколько "призраков" записи в моем векторе, которые приходят не от Phoenix :: push_back. Также это, кажется, не оптимальный путь для меня. Возможно ли нам автоматическое распространение атрибутов в matrixBlock_ вместо семантических действий?

typedef vector<columnT> Matrix;
matrix_ = repeat(numBlocks)[ matrixBlock_(_val) ];
matrixBlock_ = *column[phoenix::push_back(_r1, _1)];

qi::rule<Iterator, Matrix(), ascii::space_type> matrix_;
qi::rule<Iterator, void(Matrix&), ascii::space_type> matrixBlock_;
Update

уточнить вопрос:

если я напишу правило без семантических действий, синтезированный атрибут matrix_ будет

vector< vector< columnT > >

-

typedef vector<columnT> Matrix;
matrix_ = repeat(numBlocks)[ matrixBlock_ ];
matrixBlock_ = *column;

qi::rule<Iterator, Matrix(), ascii::space_type> matrix_;
qi::rule<Iterator, Matrix(), ascii::space_type> matrixBlock_;

Я хочу, чтобы он имел тот же тип атрибута, что и matrixBlock_, одномерный массив.

Мое реальное решение - использовать только одно правило. (выглядит легко :-))

typedef vector<columnT> Matrix;
matrix_ = repeat(numBlocks)[ *column_[ phoenix::push_back(_val, _1) ] ];
//matrixBlock_ = *column;

qi::rule<Iterator, Matrix(), ascii::space_type> matrix_;
//qi::rule<Iterator, Matrix(), ascii::space_type> matrixBlock_;
Update

Я смог воспроизвести фантомные записи с этим кодом в vs2010 и повысить 1.46.1

http://liveworkspace.org/code/505091dc4631a379763567168a728e0c

output was: 42, 45, -9, 3, 2, 1, 12, 34, 56, 0, 0, 0

Моя ошибка заключалась в использовании старой версии Boost. Нет фонтомов с 1.5.

Теперь у меня есть две рабочие версии моей грамматики. Можно ли изменить грамматику без использования семантического действия push_back?

Ответы на вопрос(1)

Ваш ответ на вопрос