类名后的模板参数是什么意思?

问题描述:

今天我是通过在Visual Studio C++实现的源代码挖掘和整个的std ::的unique_ptr的以下行绊倒:类名后的模板参数是什么意思?

template<class _Ty,class _Dx> 
    class unique_ptr<_Ty[], _Dx> 

我明白的第一行。第二行让我感到惊讶。为什么类的名称背后有模板参数?那是什么意思?可能它与这是unique_ptr的数组变体有关吗?

+1

http://en.cppreference.com/w/cpp/language/partial_specialization – chris

+0

这是部分专业化。 – Jodocus

+0

请问之前请研究。如果你只是在学习C++,请考虑阅读[其中一本书](https://*.com/questions/388242/the-definitive-c-book-guide-and-list) –

的的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; 

它将使用专门的模板而不是主模板。