微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在子类(c)中专门化模板方法?

我正在尝试在其子类中专门化非模板类的模板方法

// .h文件

class MyWriter {
public:
    template<typename T>
    void test(const T & val) {
        std::cout << val << "\n";
    }
};

// .cpp文件

class MyType {
public:
    MyType(int aa,double dd) : a(aa),d(dd) {}
    int a;
    double d;
};

class MyWriterExt : public MyWriter {
public:
    template<> void test(const MyType &val) {
        test(val.a);
        test(val.d);
    }
};

int main() {
    MyWriterExt w;
    w.test(10);
    w.test(9.999);
    w.test(MyType(15,0.25));
 return 0;
}

但是我收到一个错误

Error 1 **error C2912**: explicit specialization; 
'void MyWriterExt::test(const MyType &)' is not a specialization of a function 
    template \testtemplate.cpp 30

如何扩展MyWriter类以支持用户定义的类?

解决方法

应该对同一个类进行专门化,不是为了子类,也是在类体之外:
class MyWriter {
public:
    template<typename T>
    void test(const T & val) {
        std::cout << val << "\n";
    }
};

template<>
void MyWriter::test<MyType>(const MyType & val) {
    test(val.a);
    test(val.d);
}

您不需要子类来专门化原始成员函数模板.

还要考虑overloading而不是专业化.

原文地址:https://www.jb51.cc/c/111146.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐