如何专攻模板类成员函数

How can I specialize a template class member function?

本文关键字:成员 函数 何专攻      更新时间:2023-10-16

请考虑以下示例:

    template <class T, class U>
class Test {
public:
    void f(){std::cout<<"f() not specized"<<std::endl;}
    void g(){std::cout<<"g() not specized"<<std::endl;}
    void h(){std::cout<<"h() not specized"<<std::endl;}
    //void g<long, double>(){}
};

在这里,我在注释的代码上有 en 错误。我想达到预期结果的唯一方法是将整个班级空间化。但是在下面提到的类中,我不能使用原始类的默认行为(e. f() 和 h() 函数)。

template <>
class Test<long, double> {
public:
    void f(){std::cout<<"f() specized long, double"<<std::endl;}
};

那么有没有办法在原始类中对函数进行空间化呢?

当然,你可以用一个定义来做到这一点:

template<>
void Test<long, double>::f(){std::cout<<"f() specialized long, double"<<std::endl;}