在this site上有以下段落:
在类的主体外定义显式专用类模板的成员时,语法模板<>没有使用,除非它是专门作为类模板的显式专用成员类模板的成员,因为否则,语法将要求这样的定义以模板<参数>嵌套模板所需。
我不知道突出显示的部分是什么意思。是"否则"请参阅一般情况(不使用模板<>)或异常情况(必须使用模板<>)?
我很感激对该部分的解释。
答案 0 :(得分:-1)
这将是我们的模板:
template< typename T>
struct A {
struct B {}; // member class
template<class U> struct C { }; // member class template
};
请参阅以下代码:
template<> // specialization
struct A<int> {
void f(int); // member function of a specialization
};
// template<> not used for a member of a specialization
void A<int>::f(int) { /* ... */ }
我们在定义专业化成员时没有使用template<>
,因为这是一个普通的成员类。
但是,现在看下一个代码:
template<> // specialization of a member class template
template<class U> struct A<char>::C {
void f();
};
// template<> is used when defining a member of an explicitly
// specialized member class template specialized as a class template
template<>
template<class U> void A<char>::C<U>::f() { /* ... */ }
此处我们专门介绍已定义模板的成员模板。这就是为什么我们需要使用template<>
来传递此成员模板所需的参数。在这种情况下,需要class U
来定义我们的成员模板,因此为了传递,我们需要关键字template<>
。