类名后的模板参数是什么意思?
问题描述:
今天我是通过在Visual Studio C++实现的源代码挖掘和整个的std ::的unique_ptr的以下行绊倒:类名后的模板参数是什么意思?
template<class _Ty,class _Dx>
class unique_ptr<_Ty[], _Dx>
我明白的第一行。第二行让我感到惊讶。为什么类的名称背后有模板参数?那是什么意思?可能它与这是unique_ptr的数组变体有关吗?
答
的的std::unique_ptr
主模板看起来如下:上述
template<class _Ty, class _Dx>
class unique_ptr {
/* ... */
};
模板适用于任何类型的,除了阵列。因此,std::unique_ptr
具有用于阵列看起来像一个partial specialization:
template<class _Ty, class _Dx>
class unique_ptr<_Ty[], _Dx> {
/* ... */
};
当编译器遇到所提到的模板的一个实例例如as
std::unique_ptr<int[]> foo;
它将使用专门的模板而不是主模板。
http://en.cppreference.com/w/cpp/language/partial_specialization – chris
这是部分专业化。 – Jodocus
请问之前请研究。如果你只是在学习C++,请考虑阅读[其中一本书](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) –