C++11 从内部类继承并将其同时传递到外部模板?

C++11 从内部类继承并将其同时传递到外部模板?,c++11,templates,inner-classes,C++11,Templates,Inner Classes,我试图创建一个树结构,用户可以在其中创建自己的树节点继承器,但是节点封装了一些代码,用于管理其在树中的位置并向继承器公开子节点。我有类似的代码: template <typename TData> class TreeBase { protected: struct TreeNode { // should be fully encapsulated TData data; ... }; public: ... }; template

我试图创建一个树结构,用户可以在其中创建自己的树节点继承器,但是节点封装了一些代码,用于管理其在树中的位置并向继承器公开子节点。我有类似的代码:

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");
};
模板
类树基{
受保护的:
结构TreeNode{//应完全封装
TData数据;
...
};
公众:。。。
};
模板
结构树:公共树基{
类节点{
typename树基::树节点_tn;//保持封装
公众:。。。
};
...
static_assert(std::is_base_of::value,“TNode必须是NodeTrie::Node的后代”);
};

虽然类定义可以编译,但我不知道如何使用它们。如果不将节点的继承器放在树的继承器中,我就无法生成节点的继承器,如果不传入我的节点类型,我就无法生成树的继承器。这是个鸡和蛋的问题。有什么建议吗?

从静态断言(
的基础)可以看出,您希望用户类型继承自树节点类型(
struct A:tree::node{};
)。你为什么要那样?我确实想要那份遗产。
Node
上的公共方法对于树上的某些计算非常有用和必要。您有一个递归,您希望
a
tree::Node
继承,它包含
TreeBase::TreeNode
,它包含
a
。是的,我有一个递归问题。我正在寻找一些替代策略。您有
Node
TNode
TreeNode
,用户不清楚哪个在做什么。投资于更好的名字。