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
,用户不清楚哪个在做什么。投资于更好的名字。