c ++:将模板声明为类成员

时间:2014-11-21 07:36:03

标签: c++ class templates

我想要一个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;
};

1 个答案:

答案 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;