przekazać atrybut do reguły dziecka w duchu wzmocnienia

Mam dwie reguły z tym samym atrybutem.

Czy jest możliwe przekazanie atrybutu reguły matrix_ do reguły child matrycBlock_? Chcę, aby dyrektywa repeat nie tworzyła atrybutu wektora formy <>. Zamiast tego powinien po prostu wpisywać do atrybutu matrix_ (czasy numBlocks). Próbowałem przekazać atrybut jako atrybut dziedziczony do reguły podrzędnej i kompiluje się (patrz poniżej). Ale dostaję kilka wpisów „duchów” w moim wektorze, które nie pochodzą od feniksa :: push_back. Wydaje się, że nie jest to dla mnie optymalny sposób. Czy możliwe jest automatyczne propagowanie atrybutów w matrixBlock_ zamiast działań semantycznych?

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

wyjaśnić pytanie:

jeśli napiszę regułę bez działań semantycznych, to zsyntetyzowany atrybut matrix_ będzie

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

Chcę, aby miał ten sam typ atrybutu co matrixBlock_, tablica 1-dimansional.

moim rzeczywistym rozwiązaniem jest użycie tylko jednej reguły. (wygląda na łatwe :-))

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

Udało mi się odtworzyć wpisy fantomowe z tym kodem w vs2010 i zwiększyć 1.46.1

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

wyjście: 42, 45, -9, 3, 2, 1, 12, 34, 56, 0, 0, 0

Mój błąd polegał na użyciu starej wersji Boosta. Brak phontoms z 1,5.

Teraz mam dwie działające wersje mojej gramatyki. Czy możliwe jest przeprojektowanie gramatyki bez użycia akcji semantycznej push_back?

questionAnswers(1)

yourAnswerToTheQuestion