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

时间:2017-10-05 13:13:39

标签: c++ templates unique-ptr

今天我正在深入研究Visual Studio C ++实现的源代码,并偶然发现了std :: unique_ptr的以下几行:

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

我理解第一行。第二行让我感到惊讶。为什么模板参数背后是类的名称?那是什么意思?可能是因为这是unique_ptr的数组变体?

1 个答案:

答案 0 :(得分:3)

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> {
    /* ... */
};

当编译器遇到上述模板的实例化时,例如如

std::unique_ptr<int[]> foo;

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