Pase el atributo a la regla del niño en espíritu de impulso

Tengo dos reglas con el mismo atributo.

¿Es posible pasar el atributo de la regla de matrix_ a la regla de matrixBlock_ child? Quiero evitar que la directiva de repetición cree un atributo del vector de formulario <>. En su lugar, debería seguir escribiendo en el atributo de matrix_ (los tiempos de numBlocks). Intenté pasar el atributo como atributo heredado a la regla secundaria y se compila (ver más abajo). Pero tengo varias entradas "fantasmas" en mi vector que no provienen del phoenix :: push_back. Además, esta no parece ser la manera óptima para mí. ¿Es posible para nosotros la propagación automática de atributos en matrixBlock_ en lugar de acciones 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_;
Actualizar

Para aclarar la pregunta:

Si escribo la regla sin acciones semánticas, el atributo sintetizado de matrix_ sería

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

Quiero que tenga el mismo tipo de atributo que matrixBlock_, una matriz 1-dimansional.

Mi solución real es usar una sola regla. (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_;
Actualizar

Pude reproducir las entradas fantasma con este código en vs2010 y aumentar 1.46.1

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

La salida fue: 42, 45, -9, 3, 2, 1, 12, 34, 56, 0, 0, 0

Mi error fue usar una versión antigua de Boost. No hay phontoms con 1.5.

Ahora tengo dos versiones funcionales de mi gramática. ¿Es posible rediseñar la gramática sin el uso de la acción semántica push_back?

Respuestas a la pregunta(1)

Su respuesta a la pregunta