我想要一个node
类来构建一个树。 node
是一个模板类,包含模板参数_Data
和_Container
。对于模板争论中没有递归,我让_Container
成为类的模板类instand。我在typedef _Data data_type
中声明了node
,并希望使用node::container_type
之类的node::data_type
。我该怎么办?
template<
typename
_Data,
template<typename T> class
_Container = std::vector>
struct node
{
typedef _Data data_type;
//TODO container_type
typedef node<_Data, _Container> type;
typedef std::shared_ptr<type> ptr;
typedef _Container<ptr> ptrs;
Data data;
ptrs children;
};
答案 0 :(得分:2)
在C ++ 11中,您可以使用以下内容:
template<typename T, template<typename> class Container>
struct node
{
using data_type = T;
template <typename U>
using container_templ = Container<U>;
};
请注意,container_templ
不是类型(而container_templ<T>
是)。
另请注意std::vector
与模板Container
不匹配,因为std::vector
需要额外的(默认)参数Allocator
,因此您必须执行以下操作:
template <typename T>
using My_Vector = std::vector<T>;
template<typename T, template<typename> class Container = My_Vector>
struct node;