std容器的模板typedef(没有专门化)?

dte*_*ech 6 c++ templates typedef specialization template-specialization

是否可以在std容器上使用typedef而不专门化它?

像这样的代码有效:

typedef std::vector<int> intVector;
Run Code Online (Sandbox Code Playgroud)

但是对于这段代码:

template <typename T>
typedef std::vector<T> DynamicArray<T>;
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

'typedef'的模板声明

可以用C++做到这一点吗?

Cat*_*lus 10

是的,在C++ 11中.

template <typename T>
using DynamicArray = std::vector<T>;
Run Code Online (Sandbox Code Playgroud)

(不是说你应该使用这个确切的别名.)


log*_*og0 6

如果你的编译器支持c ++ 11:

template <typename T>
using DynamicArray = std::vector<T>;
Run Code Online (Sandbox Code Playgroud)

否则(c ++ 98或更早版本)您可以使用如下的帮助结构

template<typename T>
struct DynamicArray
{
  typedef std::vector<T> type;
};
Run Code Online (Sandbox Code Playgroud)

然后用它作为

DynamicArray<int>::type my_array;
Run Code Online (Sandbox Code Playgroud)

继承自std :: vector是一种可能的解决方案,但要注意STL容器没有虚析构函数.即:

template <typename T>
struct DynamicArray: vector<T> { ... };

int main() {
  vector<int>* p = new DynamicArray<int>();
  delete p; // this is Undefined Behavior
  return 0;
}
Run Code Online (Sandbox Code Playgroud)