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

前端之家收集整理的这篇文章主要介绍了如何在子类(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而不是专业化.

猜你在找的C&C++相关文章