【问题标题】:How can I specialize a template class member function?如何专门化模板类成员函数?
【发布时间】:2016-05-22 19:14:32
【问题描述】:

考虑以下示例:

    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>(){}
};

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

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

那么有没有办法将原始类中的函数空间化??

【问题讨论】:

    标签: c++ templates traits template-specialization specialization


    【解决方案1】:

    当然可以do it with a definition:

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

    【讨论】:

    • 谢谢。有效。但我想知道它是如何工作的,因为 f 的主体从未在类的命名空间中声明??
    • @EduardRostomyan,定义也是声明。尽管这不适用于声明类的成员,但它确实适用于声明完全专用的类模板的成员。我不确定我是否可以公正地进行技术解释。但是,您可以找到一些解释和示例in a reference
    猜你喜欢
    • 2021-02-20
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 2019-03-24
    相关资源
    最近更新 更多