наследовать от внутреннего класса и передавать его во внешний шаблон одновременно? - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь создать древовидную структуру, в которой пользователь может сделать свой собственный узел дерева наследником, но узел инкапсулирует некоторый код для управления своим положением в дереве и предоставления потомков наследникам. У меня есть код, подобный этому:

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, и я не могу сделать наследником Tree, не передав свой тип узла. Это проблема курицы и яйца. Есть предложения?

...