Ich schreibe einen baumartigen Container, wo jeder "Knoten" eine Liste mit Verzweigungen/Unterbäumen hat, derzeit sieht mein Kopf so aus:
class _tree {
public:
typedef _tree* tree_ptr;
typedef std::list<_tree> _subTreeTy;
explicit _tree(const _ValTy& v, const _NameTy& n); //create a new tree
_tree(const _ValTy& v, const _NameTy& n, tree_ptr _root);
//create a new tree and add it as branch to "_root".
~_tree();
void add_branch(const _tree& branch); //add by copy
void add_branch(_tree&& branch); //add by move
private:
_subTreeTy subtrees;
_ValTy value;
_NameTy name;
};
_tree::_tree(const _ValTy& v, const _NameTy& n, tree_ptr _root)
: root(_root),
value(v),
name(n)
{
_root->add_branch(*this); //not rvalue(???)
}
Nun würde der zweite Konstruktor einen Baum innerhalb von _root
- aber wie funktioniert das mit dem Anrufen (Verletzung der Privatsphäre ignorieren):
_tree Base(0,"base");
_tree Branch(1, "branch", &Base);
Base.subtrees.begin()->value = 8;
std::cout << Branch.value;
Wie kann ich es so einrichten, dass Branch
& *Base.subtrees.begin()
auf denselben Knoten verweisen? Oder sollte ich den anderen Weg gehen. verwenden add_branch()
um einen Zweig/Unterbaum zu erstellen?