首页 > 解决方案 > 从内部类继承并同时将其传递给外部模板?

问题描述

我正在尝试创建一个树结构,用户可以在其中创建自己的树节点继承者,但该节点封装了一些代码来管理其在树中的位置并将子节点暴露给继承者。我有类似这样的代码:

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 的继承者。这是鸡和蛋的问题。有什么建议么?

标签: c++11templatesinner-classes

解决方案


推荐阅读