试图确定类模板成员显式特化背后的逻辑,我在下面编写了这段代码:
#include <iostream>
using namespace std;
template<class T> class X
{
public:
template<class U> class Y
{
public:
template<class V> void f(U,V);
void g(U);
};
};
template<> template<> template<class V>
void X<int>::Y<int>::f(int, V) {}
int main() {
X<int>::Y<int> b;
b.f(1, 1);
}
它编译没有任何问题。但是当我引入如下所示的更改时,它根本拒绝编译:
#include <iostream>
using namespace std;
template<class T> class X
{
public:
template<class U> class Y
{
public:
template<class V> void f(U,V);
void g(U);
};
};
template<> template<class U> template<class V> // changes
void X<int>::Y<U>::f(U, V) {} // changes
int main() {
X<int>::Y<int> b;
b.f(1, 1);
}
错误:
1>d:\projects\programs\youtube\lesson\lesson\main.cpp(17): error C3860: template argument list following class template name must list parameters in order to used in template parameter list 1>d:\projects\程序\youtube\lesson\lesson\main.cpp(17):错误 C3855:“X”:模板参数“T”与声明不兼容
有人可以向我解释这里发生了什么吗?谢谢!