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)
(不是说你应该使用这个确切的别名.)
如果你的编译器支持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)