【发布时间】:2012-12-17 22:59:23
【问题描述】:
我遇到了一个我无法解释或找不到解释的有趣点。考虑以下模板定义(使用 mingw g++ 4.6.2 编译):
template <typename T, typename S>
class Foo
{
public:
void f(){}
void g(){}
};
如果我们愿意,我们可以完全专门化任何单个成员函数:
template <>
void Foo<char,int>::f() {}
但部分特化失败,出现“无效使用不完整类型 'class Foo<...>'”错误:
template <typename T, typename S>
void Foo<T,S*>::f()
{
}
template <typename T>
void Foo<T,int>::f()
{
}
我不知道为什么。这是为了避免一些我无法预见的问题而做出的有意识的设计决定吗?是疏忽吗?
【问题讨论】:
标签: c++ template-specialization