派生类的模板特化问题

时间:2010-08-13 13:20:58

标签: c++ templates

编译以下内容时

#include <iostream>

#define XXX 1
#define YYY 2

class X
{
public:

    template< int FLD >
    void func();
};

template<> void X::func< XXX >()
{
    std::cout << "X::func< " << XXX << " >" << std::endl;
}

class Y : public X
{
public:
};

template<> void Y::func< YYY >()
{
    std::cout << "Y::func< " << YYY << " >" << std::endl;
}

template<> void Y::func< XXX >()
{
    std::cout << "Y::func< " << XXX << " >" << std::endl;
}

int main( int c, char *v[] )
{
    X x;

    Y y;
}

我得到了

x.cpp:24: error: template-id 'func<2>' for 'void Y::func()' does not match any template declaration
x.cpp:24: error: invalid function declaration
x.cpp:29: error: template-id 'func<1>' for 'void Y::func()' does not match any template declaration
x.cpp:29: error: invalid function declaration

我正在尝试在基类中专门化模板。

任何人都可以解释它是如何完成的,或者为什么我不能这样做。

THX 标记

2 个答案:

答案 0 :(得分:1)

在类Y中没有声明名称为func()的方法,因此编译器找不到任何Y :: func()声明

答案 1 :(得分:1)

您无法执行此操作,因为您无法执行以下操作,并且出于同样的原因,Y::func未声明Y

class X {
public: 
   void foo();
};
void X::foo() {}
class Y : public X {
};
void Y::foo() {}