Partial Specialization in einer Member Funktion



  • Hi

    Ich versuche eine Template Memberfunktion meiner Klasse zu spezialisieren:

    class CConfig
    {
    template<class T> bool getEntry(const string &entry, T &value) const
    template<> bool CConfig::getEntry<string>(const string &entry, string &value) const
    };
    

    Zum compilieren verwende ich Dev-C++ bzw. MinGW (GCC 3.2). Leider bekomme ich immer folgende Fehlermeldungen (macht nicht viel Sinn).

    explicit specialization in non-namespace scope
    invalid use of undefined type class AI::CConfig' forward declaration ofclass AI::CConfig'
    confused by earlier errors, bailing out

    Habe ich nur im Code einen Fehler gemacht oder ist das überhaupt nicht möglich?



  • Habe ich nur im Code einen Fehler gemacht oder ist das überhaupt nicht möglich?

    Ja du hast einen Fehler gemacht. Ja es ist möglich.

    #include <string>
    using namespace std;
    class CConfig
    {
    template<class T> 
    bool getEntry(const string &entry, T &value) const;
    };
    template<class T> 
    bool CConfig::getEntry(const string& e, T& v) const
    {
    //...
    return false;
    
    }
    
    // Spezialisierung
    template<>
    bool CConfig::getEntry<string>(const string &entry, string &value) const
    {
    //...
    return true;
    }
    

    Ich würde hier allerdings zur ganz normalen Überladung raten:

    class CConfig
    {
    template<class T> 
    bool getEntry(const string &entry, T &value) const;
    bool getEntry(const string &entry, string &value) const;
    
    };
    

    Noch was zum Lesen: http://www.gotw.ca/publications/mill17.htm

    [ Dieser Beitrag wurde am 29.05.2003 um 22:19 Uhr von HumeSikkins editiert. ]



  • Danke, dass klappt wunderbar 🙂

    Nur die Klasse als Template zu implementieren geht in meinem Fall jedoch nicht, da die einzelnen Einträge verschiedene Typen haben können. Das ganze ist ein Art Wrapper für STL String Stream.



  • Nur die Klasse als Template zu implementieren geht in meinem Fall jedoch nicht

    Hm, wie kommst du jetzt darauf?


Anmelden zum Antworten