1
template<typename T>
class C
{
void f() { }
};
/*template<typename T>
void C<T*>::f() { }*/
template<>
void C<int*>::f() { }
如果我们删除注释,代码将不会编译。我知道这一点(我也知道,我们应该有partial specialization
为C<T*>
),但我无法找到标准中的单词,这就解释了这种行为。我重读了几次标准的14 par
。你能给我一个标准的报价或标准,这解释了这一点吗?成员模板专业化
编辑。
template<typename T>
class C
{
template<typename U>
struct S { };
};
// #1
/*template<typename T>
class C<T*>
{
template<typename U>
struct S { };
};*/
// #2
/*template<typename T>
template<typename U>
struct C<T*>::S<U*> { };*/
template<>
template<typename U>
struct C<int*>::S<U*> { };
如果我们只删除下一条注释然后#2 - 代码将不会编译。
我更新了问题。更新示例的答案是正确的? – ForEveR
@ForEveR:我认为是。重点是在#2编辑的例子中,'template struct C :: S'是* not *类模板。 –
好的。但为什么?为什么如果我们有这个部分规范 - 例子是正确的? – ForEveR