带模板的类型类型?

时间:2014-08-14 10:17:09

标签: c++

template<???>    
struct Container{
  T t;
  M<T> v;
}

Container<vector<int>>应该生成

struct Container{
 int t;
 vector<int> v;
}

我可以用模板表达吗?

3 个答案:

答案 0 :(得分:6)

是:

template<typename T, template <typename, typename> class M>
struct Container {
    T t;
    M<T,std::allocator<T>> v;
};

使用:

Container<int,std::vector>

可替换地:

template <typename C>
struct Container {
    typename C::value_type t;
    C v;
};

并使用:

Container<std::vector<int>>

答案 1 :(得分:2)

保持模板简单,否则你会头疼。

template<class CONTAINER>
struct Container
{
    typedef CONTAINER container_type;
    typedef typename container_type::value_type value_type;

    value_type t;
    container_type v;
};

答案 2 :(得分:0)

是的,有两种方法。您可以要求您的type参数为定义了value_type的容器:

template <typename T>    
struct Container {
  typename T::value_type t;
  T v;
};

(如果T不是某个具有value_type typedef的类,则无法编译,或者您可以做更精细的事情。如果可能的话,我需要定义value_type

相关问题