Как специализировать метод шаблона в подклассе (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 для поддержки пользовательских классов?

6
задан Björn Pollex 14 November 2010 в 09:45
поделиться