c++ - 带有 std::vector 的模板 typedef 具有自定义分配器

标签 c++ templates g++ typedef c++03

我想定义一个自定义 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> > {};

可以按您最初希望的方式使用。

关于c++ - 带有 std::vector 的模板 typedef 具有自定义分配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47901838/

相关文章:

c++ - C++11 lambdas 如何表示和传递?

c++ - 错误的循环/阅读 C++

c++ - 如何以优雅高效的方式将无符号/有符号整数/长整型转换为 C 字符串?

android - 未找到实现

c++ - 下面的代码片段在发布版本中发生了什么?

C++ 代码风格 : SHA2 algorithm

c++ - 模板值的公共(public)访问

C++ 模板和继承,派生类中的函数未被替换

c++ - nullptr_t 未在 g++ 4.9.2 上定义

c++ - eclipse 中的 lapack undefined reference