class 名称后的模板参数是什么意思?
What is the meaning of template arguments after class name?
今天我正在研究 Visual Studio C++ 实现的源代码,偶然发现了 std::unique_ptr 的以下几行:
template<class _Ty,class _Dx>
class unique_ptr<_Ty[], _Dx>
第一行我看懂了。第二行让我感到惊讶。为什么模板参数在 class 的名称后面?那是什么意思?可能与这是 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> {
/* ... */
};
当编译器遇到上述模板的实例时,例如作为
std::unique_ptr<int[]> foo;
它将使用专用模板而不是主模板。
今天我正在研究 Visual Studio C++ 实现的源代码,偶然发现了 std::unique_ptr 的以下几行:
template<class _Ty,class _Dx>
class unique_ptr<_Ty[], _Dx>
第一行我看懂了。第二行让我感到惊讶。为什么模板参数在 class 的名称后面?那是什么意思?可能与这是 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> {
/* ... */
};
当编译器遇到上述模板的实例时,例如作为
std::unique_ptr<int[]> foo;
它将使用专用模板而不是主模板。