passe o atributo para a regra da criança no espírito de impulso

Eu tenho duas regras com o mesmo atributo.

É possível passar o atributo da regra matrix_ para a regra filha matrixBlock_? Eu quero manter a diretiva repeat de criar um atributo do vetor de formulário <>. Em vez disso, deve continuar escrevendo no atributo de matrix_ (tempos do numBlocks). Eu tentei passar o atributo como atributo herdado para a regra filho e compila (veja abaixo). Mas eu recebo várias entradas "fantasmas" no meu vetor que não vêm do phoenix :: push_back. Também isso parece não ser o melhor caminho para mim. É possível para nós a propagação automática de atributos em matrixBlock_ em vez de ações semânticas?

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_;
Atualizar

para esclarecer a questão:

se eu escrever a regra sem ações semânticas, o atributo sintetizado de matrix_ seria

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_;

Eu quero que ele tenha o mesmo tipo de atributo que matrixBlock_, um array de 1-dimansional.

minha solução atual é usar apenas uma regra. (parece fácil :-))

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_;
Atualizar

Consegui reproduzir as entradas fantasmas com este código no vs2010 e aumentar 1.46.1

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

a saída foi: 42, 45, -9, 3, 2, 1, 12, 34, 56, 0, 0, 0

Meu erro foi usar uma versão antiga do Boost. Não há phontoms com 1.5.

Agora eu tenho duas versões de trabalho da minha gramática. É possível redesenhar a gramática sem o uso da ação semântica push_back?

questionAnswers(1)

yourAnswerToTheQuestion