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

标签 c++ templates unique-ptr

今天我正在研究 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> {
    /* ... */
};

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

std::unique_ptr<int[]> foo;

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

关于c++ - 类名后的模板参数是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46586552/

相关文章:

c++ - 继承自专业类?

c++ - 如何使具有 unique_ptr 成员的类与 std::move 和 std::swap 一起工作?

c++ - 节点句柄与 std::unique_ptr

c++ - unique_ptr vector 的赋值运算符

c++ - 应该是一个虚拟析构函数?但是怎么办?

c++ - 我应该专攻还是重载?

c++ - 模板默认参数 SFINAE 与 clang 不明确,适用于 g++

C++ OpenGL - 顶点颜色

c++ - log4cpp - 未处理的异常和访问冲突

c++ - 固定大小常量数组的常量数组作为 C++ 中方法的参数