以下给了我几个编译错误:
error C2995: 'void A<T>::B<Q>::func(void)' : function template has already been defined
error C3855: 'A<T>::B<Q>': template parameter 'Q' is incompatible with the declaration
如果没有类声明中的定义,我怎么能做到这一点?
template<typename T>
struct A
{
template<typename Q>
struct B
{
void func();
};
};
template<typename T>
template<typename Q>
void A<T>::B<Q>::func()
{
}
template<typename T>
template<>
void A<T>::B<int>::func()
{
}
编辑:
根据 14.7.3 §16,如果嵌套的类模板不是特化的,则它不能被特化。但是,这让我想知道为什么嵌套类专业化在外部类声明中完全定义时会起作用,如下所示:
template<typename T>
struct A
{
template<typename Q>
struct B
{
void func(){}
};
template<>
struct B<int>
{
void func(){}
};
};
也许这只是 VS2010 允许我做一些我不应该做的事情?