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

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

概述我正在尝试在其子类专门化模板类的模板方法: // .h文件 class MyWriter {public: template<typename T> void test(const T & val) { std::cout << val << "\n"; }}; // .cpp文件 class MyType {public: MyType( 我正在尝试在其子类中专门化非模板类的模板方法:

// .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而不是专业化.

总结

以上是内存溢出为你收集整理的如何在子类(c)中专门化模板方法?全部内容,希望文章能够帮你解决如何在子类(c)中专门化模板方法?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1256496.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存