我正在编写一个树状容器,其中每个“节点”都有一个带有分支/子树的列表,目前我的头看起来像:
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(???)
}
现在第二个构造函数将在内部创建一个树_root
- 但是这如何与调用一起工作(忽略私有违规):
_tree Base(0,"base");
_tree Branch(1, "branch", &Base);
Base.subtrees.begin()->value = 8;
std::cout << Branch.value;
我将如何做到这一点Branch
并*Base.subtrees.begin()
引用同一个节点?或者我应该走另一条路。用于add_branch()
创建分支/子树?