J'ai un arbre d'objets, où chaque objet a std::vector
des pointeurs vers ses enfants. La classe de l'objet a une méthode rewrite()
qui est récursive appliquée pour modifier l'objet et ses enfants, typiquement avec les transformations suivantes, où [N]
est l'objet en cours de réécriture et (M)
est l'élément qui rewrite()
rendements:Quelle est la manière la plus propre d'étendre cette conception pour la réécriture d'arbres?
(A) [A] /\ [A] /\ --> B X | --> (B) B C \ B C
Quelle est la manière la plus propre d'étendre cette configuration pour permettre des transformations comme celle-ci?
A X | /\ [B] --> C A | | C (Y)
C'est, ceux qui re-racine de l'arbre, déplacer un élément, insérer un nouvel élément, et le retour de l'élément inséré. J'ai du mal à trouver quelque chose de sympa qui implique aussi un refactoring minimal. Pensées?
Comment une méthode peut-elle retourner Y si A a un pointeur sur elle? Voulez-vous dire que la méthode renvoie une copie de Y, ou qu'elle renvoie par référence? Et doit-il y avoir un autre lien vers l'arbre (par exemple un pointeur quelque part qui pointe vers la racine)? – Beta
Les éléments sont renvoyés par un pointeur (ou plutôt 'shared_ptr'). Pour commencer à réécrire, 'rewrite()' est appelé sur l'élément racine de l'arbre. En l'état, 'root-> rewrite()' renvoie 'root', mais il devra retourner l'élément * new * root. –