【发布时间】:2021-02-06 22:27:50
【问题描述】:
我已阅读 What does template's implicit specialization mean? 及其答案,但我仍然不满意我从 cppreference.com 了解 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
问题:
-
cmets 说
template<> template<classT2> struct A<short>::B {};行是“主要成员模板的完全专业化”。主要成员模板在 cmets 中标识为结构B。当A被short替换为class T时,这条线怎么能成为B的特化? -
当模板参数
T2未指定时,该行如何成为B的“完整”特化? -
cmets 和随附的文本表明“显式专业化”和“完全专业化”是同义词。如果上面引用的代码行是
B的显式特化,那么A的隐式特化在哪里?
【问题讨论】:
标签: c++ templates specialization