如何在子类(c)中专门化模板方法?
发布时间:2020-12-16 03:32:08 所属栏目:百科 来源:网络整理
导读:我正在尝试在其子类中专门化非模板类的模板方法: // .h文件 class MyWriter {public: templatetypename 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
我正在尝试在其子类中专门化非模板类的模板方法:
// .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而不是专业化. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |