类模板成员的显式特化

时间:2014-01-21 16:23:35

标签: c++ templates explicit-specialization

试图确定类模板成员显式特化背后的逻辑我在下面编写了这段代码:

#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&gt; d:\ projects \ programs \ youtube \ lesson \ lesson \ main.cpp(17):错误C3860:类模板名称后面的模板参数列表必须按照模板参数列表中使用的顺序列出参数 1&gt; d:\ projects \ programs \ youtube \ lesson \ lesson \ main.cpp(17):错误C3855:&#39; X&#39;:模板参数&#39; T&#39;与声明

不兼容

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

0 个答案:

没有答案