我尝试制作模板化的Trie结构。它表示内部私有结构Node
中的树,其中包含TElem
,bool
,表示此特定节点是终端和子项向量:
template<typename TElem>
class Trie
{
// ...
private:
struct Node
{
TElem elem;
bool isTerminal;
std::vector<std::shared_ptr<Node>> children;
};
Node root_;
};
现在我想制作另一个模板参数,以便选择另一个底座容器,例如: list
。怎么办呢?
答案 0 :(得分:2)
使用模板模板参数(未经测试的代码,但一般的想法应该没问题):
template <typename TElem,
template <typename, typename> class Cont
template <typename> class Allocator=std::allocator>
class Trie {
private:
struct Node
{
typedef std::shared_ptr<Node> NodePtr_;
TElem elem;
bool isTerminal;
Cont<NodePtr_, Allocator<NodePtr_>> children;
};
Node root_;
};
然后
Trie<int, std::list> myTrie = ....;