我正在尝试创建一个树结构,用户可以在其中创建自己的树节点继承者,但是该节点封装了一些代码,用于管理其在树中的位置并将子代暴露给继承者。我有类似的代码:
template <typename TData>
class TreeBase {
protected:
struct TreeNode { // should be fully encapsulated
TData data;
...
};
public: ...
};
template <typename TNode>
struct Tree: public TreeBase<TNode> {
class Node {
typename TreeBase<TNode>::TreeNode _tn; // keep encapsulated
public: ...
};
...
static_assert(std::is_base_of<Node, TNode>::value, "TNode must be a descendant of NodeTrie::Node");
};
尽管类定义可以编译,但我不知道如何使用它们。如果不能将Node的继承人放到Tree的继承人中,就不能成为Node的继承人;如果不传入节点类型,就不能成为Tree的继承人。这是鸡肉和鸡蛋的问题。有什么建议吗?