C ++使用模板来专门化类模板

时间:2020-09-26 17:09:54

标签: c++

我对以下代码感兴趣,并且想知道此语法的名称。

//Define a class template
template <class T>
class my_unique_ptr{}

//What is this?
template <class T>
class my_unique_ptr<T[]>{}

完整的示例可以在这里https://medium.com/swlh/c-smart-pointers-and-how-to-write-your-own-c0adcbdce04f

我知道这段代码的执行结果,但是我不知道语法是什么。我尝试搜索,但未找到任何结果。它看起来像一个显式的专业化,但是没有公共头文件template<>。语法看起来也像函数重载,但它适用于类。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

这是template partial specialization的示例:

template <class T>
class my_unique_ptr{};

template <class T>
class my_unique_ptr<T[]>{}; // <-- Partial specialized when 'T' matches 'T[]'

类模板的部分专业化本身仍然是一个类模板,仅当类型与专业化匹配时才会实例化。对于T[],当完整类型以[]结尾时,这匹配。例如,my_unique_ptr<int[]>将使用T = int实例化部分专业化。

这与完整的模板专业化不同,后者是离散的固定类型,本身不被视为模板。例如:

template <>
class my_unique_ptr<int>{}; // <-- full specialization in terms of 'int'