我对以下代码感兴趣,并且想知道此语法的名称。
//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<>
。语法看起来也像函数重载,但它适用于类。任何建议将不胜感激。
答案 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'