我已阅读有关Explicit Specialization of Class Templates和Partial Specialization of Class Templates的文档,但不明白本例中使用的是什么类型的专业化(msdn链接仅用于我当前的环境,问题更多或更少的理论)。我需要c ++标准中使用的名称和/或文档链接或c ++标准段落的引用。我试图解决的问题直接询问是非常复杂的,但我知道如何使用与此示例中使用的类似的方法。
template<class T>
struct is_vector {
static bool const value = false;
};
template<class T>
struct is_vector<std::vector<T>> {
static bool const value = true;
};
答案 0 :(得分:2)
这定义了一个(主要)类模板is_vector<T>
,然后将其部分专门用于T = std::vector<U>
。
一般规则很简单:
主要模板:
template <something here> class someName /*no angle barckets here */ { ... }
部分专业化:
template <something here> class someName<otherThing here> { ... }
明确的专业化:
template <> class someName<something here> { ... }
引用标准没有简短的部分,但您可以参考子章C++11[temp.class.spec]
。该章中没有任何内容可以限制对指针和引用的部分特化。请注意,您提供的MSDN链接不会将其范围限制为它们;它说&#34;比如&#34;在例子之前,这并不意味着没有其他可能性。
答案 1 :(得分:1)
这是部分专业化。您的MSDN链接描述了两种类型的部分特化,这是第二种:
为什么它偏袒而不明确?因为专用模板仍未完全指定其所有类型参数。将为任何类型T 的矢量选择专用版本。您可以进一步专门化它来处理std :: vector&lt; int&gt; - 这将是一个明确的专业化。
此外 - 用于显式特化的MSDN链接表示&#34;使用部分特化...当您想要专门化整个类型集的行为时,例如所有指针类型,引用类型或数组类型。&# 34;使用&#39;如&#39;清楚地表明该清单并非详尽无遗。匹配向量的类型集&lt; T>是另一种&#34;整套类型&#34;。