fragen zu templates
-
hallo,
da ich noch relativ neu bin in c++, habe ich noch so meine probleme mit den templates. und zwar weiß ich nicht, ob und wie folgendes funktioniert:
class AClass{ public: template <typename T> void setParam(int identifier, T* parameter); template <typename T> T* getParam(int identifier); }; void OtherClass::getTheParams(AClass aC, ind id){ SomeClass sC; sC=aC->getParam(id)); }also was ich machen möchet ist eine methode, die verschiedene rückgabewerte liefern kann, abhängig vom identifier. SomeClass könte also beispielsweise ein string, oder sonst irgendein objekt sein.
ich hoffe jemand versteht das was ich will und kann mir helfen
danke im vorraus
hans
-
Also implizit kann der Compiler die Template-Parameter nur bestimmen, wenn sie in der Argumentliste der Funktion vorkommen. Wenn das nicht geht (oder der Compiler einen falschen Typ "errät"), mußt du den Typ explizit angeben:
void OtherClass::getTheParams(AClass aC, ind id){ SomeClass* sC; sC=aC->getParam<SomeClass>(id)); }
-
das ging ja schnell, DANKESCHÖN. der hinweis hat jetzt auch beim kompilierfehler geholfen. leider funktioniert es noch immer nicht, da der (zumindest meiner meinung nach) linker einen fehler wie diesen ausgibt:
undefined reference to `SomeClass* OtherClass::getParam<ImageData>(int)'
-
Dem Compiler reicht die obige Klassendefinition auch aus - um den Linker zufriedenzustellen, benötigst du im Header von AClass noch die Definition von AClass::getParam() und AClass::setParam().
(wichtig ist dabei "im Header", sonst weiß der Compiler nicht, ob er nun getParam<int>, getParamstd::string oder getParam<ImageData> anlegen soll)
-
hm, die definition hätte ich eigentlich schon angegeben,
class AClass{ public: template <typename T> void setParam(int identifier, T* parameter); template <typename T> T* getParam(int identifier); }; void OtherClass::getTheParams(AClass aC, ind id){ SomeClass sC; sC=aC->getParam(id)); }class AClass steht im header
-
was ich meinte ist, dass
class AClass{ public: template <typename T> void setParam(int identifier, T* parameter); template <typename T> T* getParam(int identifier); };im header steht
-
Das ist die DEKLARATION
(schau mal in die C++ FAQ und lass dich über die Unterschiede aufklären - die DEFINITION ist die komplette Funktion inklusive Rumpf).
-
ups. vielleicht hätte ich das posting doch ein bisschen aufmerksamer
lesen sollen und nicht nur das unter hochkomma stehende "im Header". danke cstoll für die schnellste hilfe die ich bis jetzt bekommen habe.
