[solved] generischer datentyp als rückgabewert von operator[] -> syntax?
-
hallo!
hab grad vor kurzem gesehen wie man 'nen generischen datentypen von 'ner templatefunktion zurückgibt:
template<class T> T myFunc(std::string& parameter) { T t; // ... return t; } double bar = myFunc<double>( "3.14" );in anlehnung darauf jetzt meine frage: wie schreib ich sowas wenn sichs bei der funktion um 'nen überladenen []-operator handelt? also:
template <class T> T ConfigReader::operator[]( std::string key ) { T t; //... return t; }kann mir diese beiden schreibweisen vorstellen:
int myInt = reader["someSetting"]<int>; int myInt = reader<int>["someSetting"];hab beide versucht, funzen net... mir is das template-zeugs syntaktisch ohnehin net so geläufig. kann mir dabei wer helfen?
-
iko79 schrieb:
wie schreib ich sowas wenn sichs bei der funktion um 'nen überladenen []-operator handelt?
das wird kryptisch ...
ConfigReader reader; // ... int myInt = reader.operator[]< int >( "someSetting" );Gruß
Werner
-
*argl* das führt den indexer ad absurdum

DANKE!!
-
Der Index-Operator kann nur als Memberfunktion einer Klasse definiert werden. Der Typ wird also bereits durch das Objekt bestimmt, auf welches der Index-Operator angewendet wird.
Z.B. (nur schnell hingeschmiert
):#include <iostream> using namespace std; template<class T> class A { public: T& operator[](int); T m_Array[100]; }; template<class T> T& A<T>::operator [](int i) { return m_Array[i]; } int main() { A<int> x; for (int i=0; i<100; ++i) x[i] = i; for (int i=0; i<100; ++i) cout << i << "|" ; cout << endl; return 0; }Beim Index-Operator auch darauf achten, dass die Rückgabe ein L-Wert sein könnte. Es muss daher eine Referenz zurückgegeben werden.
-
die klasse ist NICHT generisch. nur die eine methode. also der indexer-operator. d.h. i muss den typen explizit angeben.
-
Ups! Ja, da war ich nicht aufmerksam. Man kann es deutlich an deinem Code erkennen.

Darf man schüchtern nachfragen, was die Absicht hinter dieser Variante des Index-Operators ist?
-
Hmm ganz einfach ... die Absicht ist klar, doch nicht sonderlich sinnig
Eine einfache Funktion tut es da auch!
@vic1986: Stell dir mal bsw. vor, du hast eine Klasse, die dir eine *.ini-Datei behandelt. So, dann sollen jetzt die einzelnen Werte ausgelesen werden ... auch kein Problem ... nur sollen die direkt als ein spezieller Typ zurück gegeben werden ...