most specialized class 在 C++ 中到底是什么意思?

What exactly does most specialized class mean in C++?

假设我们有以下内容:

template<typename T1, typename T2>
class A {}

template<typename T1, typename T2>
class A<T1*, T2*> {}

template<typename T>
class A<T, T> {}

现在,我知道我们需要 select 最专业的 class,但是对于 A,两个专业都存在歧义错误,我的老师告诉我他们具有相同的专业水平。但乍一看,我会说 A 更专业。我们究竟是如何得出这个结论的? 或者我们如何判断两个不同的专业是否处于同一水平?

首先,关于术语:这些定义中的每一个都不是 classes 的定义。第一个定义定义了一个 主要 class 模板 。其他定义定义了该主模板的部分专业化

无法按专业化“级别”对部分专业化进行分类。实际规则相当复杂,可以找到参考,例如here.

但粗略地说,如果后者接受前者接受的所有模板参数列表,但反之则不行,您可以认为一个部分特化比另一个更专业。

在您的情况下,第一个专业接受 A<int*, long*>,但第二个不接受,第二个接受 A<int, int>,但第一个不接受。所以非正式地,我们可以看到两者都不比另一个更专业

主模板也不比部分特化更特化,因此 A<double*, double*> 这三个模板都可以接受,而没有一个比所有模板都更特化其他的,是模棱两可的,导致程序是 ill-formed.