【发布时间】:2023-03-24 09:44:01
【问题描述】:
此问题旨在澄清以下文档中有关部分模板专业化的部分:
partial template specialization
我的问题与标题部分初始化的成员下的以下文本有关:
如果一个类模板是另一个类模板的成员,并且它有 部分专业化,这些专业化是 封闭类模板。如果封闭模板被实例化, 每个成员部分特化的声明被实例化 以及(与所有其他的声明方式相同,但不是定义方式) 模板的成员被实例化)
如果主要成员模板明确(完全)专门用于 给定封闭类模板的(隐式)特化, 为此忽略成员模板的部分特化 封闭类模板的特化。
如果成员模板的部分特化是显式的 专门用于封闭的给定(隐式)专业化 类模板、主要成员模板及其其他部分 仍然考虑专业化的这种专业化 封闭类模板。
上面演示的示例部分提到了以下内容:
template<class T> struct A { // enclosing class template
template<class T2>
struct B {}; // primary member template
template<class T2>
struct B<T2*> {}; // partial specialization of member template
};
template<>
template<class T2>
struct A<short>::B {}; // full specialization of primary member template
// (will ignore the partial)
A<char>::B<int*> abcip; // uses partial specialization T2=int
A<short>::B<int*> absip; // uses full specialization of the primary (ignores partial)
A<char>::B<int> abci; // uses primary
我不明白上述三种情况之间的区别,根据上面复制的文字,每种情况都需要不同的处理方式。
谁能提供一个简单的解释?
【问题讨论】:
标签: c++ templates partial-specialization