模板typedef与std :: vector有自定义分配器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板typedef与std :: vector有自定义分配器相关的知识,希望对你有一定的参考价值。

我想定义一个自定义向量类,它使用带有自定义分配器的std :: vector类,如下所示:

template <class T>
typedef std::vector<T, MyLib::MyAlloc<T> > my_vector;

然后,当我尝试将其用作:

  my_vector<std::string> v;

我在Solaris 10上的g ++ 2.95.3编译器抱怨说

 template declaration of `typedef class vector<T,MyLib::MyAlloc<T1> > my_vector'
aggregate `class my_vector<basic_string<char,string_char_traits<char>,__default_alloc_template<false,0> > > v' has incomplete type and cannot be initialized

请帮我纠正一下这个片段。

答案

C ++ 11使用“new”类型别名语法支持此功能:

template <class T>
using my_vector = std::vector<T, MyLib::MyAlloc<T> >;

“旧”表单(typedef)不能用于创建别名模板。


如果C ++ 11或更高版本不是一个选项。唯一的办法是模板元功能:

template <class T>
struct my_vector {
  typedef std::vector<T, MyLib::MyAlloc<T> > type;
};

哪个可以这样使用:

my_vector<std::string>::type v;

或者,因为std::vector是类类型:

template <class T>
struct my_vector : std::vector<T, MyLib::MyAlloc<T> > {};

可以使用哪个,因为你最初希望它被使用。

以上是关于模板typedef与std :: vector有自定义分配器的主要内容,如果未能解决你的问题,请参考以下文章

std::vector 类与非成员函数(连同 typedef)[关闭]

C++开发之using定义模板别名

C++开发之using定义模板别名

C++开发之using定义模板别名

没有函数模板“std::make_pair”的实例与参数列表匹配

C++中类与函数的模板类型推导?