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<> 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”与声明不兼容

有人可以向我解释这里发生了什么吗?谢谢!

4

0 回答 0