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 typeclass AI::CConfig' forward declaration of
class AI::CConfig'
confused by earlier errors, bailing outHabe 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?