Frage zum Arbeiten mit Templates
-
Hallo,
ich habe eine Klasse, die ein Methode besitzt, die eine zur Compilierzeit noch nicht bekannte Komponenten per Parameter bekommen soll. Daher hab' ich die Klasse in ein template gepackt. Leider funktioniert das einiges nicht:#include <iostream> using namespace std; template <typename T> class foo { public: foo(int kt); void machwas(T); //Diese Methode bekommt eine Klasse übergeben, um dann dynamische eine Instanz zu erzeugen. private: int k; }; foo::foo(int kt) { k = kt; } void foo::machwas(T Komp) {...} int main() { foo </*???*/> a(45); //??? a.machwas(TClass); //machwas soll von TClass jetzt dynamisch eine Instanz erzeugen. return 0; }Wie muss ich eine Beispielinstanz von der Klasse foo in der main erzeugen? Der Compiler fordert einen Typ, doch ich möchte einfach eine Klasse erzeugen, die nur eine Methode hat, die einen unbekannten Typen bekommt. Wie muss ich den Code verbessern?? Ich bekomme das irgendwie nicht hin.
Danke
-
Ich weiß ja nicht was du damit bezwecken willst (klingt so als wenn du was falsches versuchst) aber vielleicht hilft dir das:
#include <iostream> using namespace std; class foo { public: foo(int kt); template <typename T> void machwas(T t){ std::cout << t << std::endl; } private: int k; }; foo::foo(int kt) { k = kt; } int main() { foo a(45); a.machwas<int>(3); a.machwas<double>(3.7); return 0; }
-
Bei Templates muss der Typ auch zur Kompilierzeit schon bekannt sein. Du gehst dein Problem ggf also falsch an. Beschreib mal was du genau brauchst.
-
temp schrieb:
ich habe eine Klasse, die ein Methode besitzt, die eine zur Compilierzeit noch nicht bekannte Komponenten per Parameter bekommen soll.
Was verstehst Du unter Komponente und was von denen ist zur Compile-Zeit bekannt und was nicht?
temp schrieb:
Daher hab' ich die Klasse in ein template gepackt. Leider funktioniert das einiges nicht:
#include <iostream> using namespace std; template <typename T> class foo { public: foo(int kt); void machwas(T); //Diese Methode bekommt eine Klasse übergeben, um dann dynamische eine Instanz zu erzeugen. private: int k; }; foo::foo(int kt) { k = kt; } void foo::machwas(T Komp) {...} int main() { foo </*???*/> a(45); //??? a.machwas(TClass); //machwas soll von TClass jetzt dynamisch eine Instanz erzeugen. return 0; }Der erste Kommentar ist schonmal falsch. So, wie Du es in C++ aufgeschrieben hast, bekommt die Elementfunktion machwas ein Objekt des Typs T übergeben (pass by value).
temp schrieb:
Wie muss ich eine Beispielinstanz von der Klasse foo in der main erzeugen? Der Compiler fordert einen Typ, doch ich möchte einfach eine Klasse erzeugen, die nur eine Methode hat, die einen unbekannten Typen bekommt.
Dann darf das auch kein Klassentemplate sein. Und wenn zur Compile-Zeit nicht mal der Typ bekannt ist, hilft Dir nicht einmal ein Elementfunktions-Template.