unbekannt compile-time template parameter
-
ich habe ein klasse:
template<typename myclassA>
class meineklasse
{
// Deklarationen
}
und eine andere Klasse:
class myclassB
{
// here sind Deklarationen ...
meineklasse<???> eineKlasse// hier ist mein Problem
}
Der parameter type wird nur bekannt waehrend die Ausfuerung(runtime), wie geht c++ mit so was um?
-
- Warum benutzt auch du keine Cpp tags?!
- Warum machst du aus myClassB kein template, damit eineKlasse definierbar ist?
Alternativ kannst du auch eine abstrakte Basisklasse für meineKlasse erstellen und dann in myClassB dynamisch allokieren - Auch für ein Beispiel kann man bessere Namen als irgendein denglischen Unsinn nehmen, welcher nicht auseinanderzuhalten ist.
:p
-
Du hast die Frage nicht verstanden es koennte villeicht liegen an dem <denglischen>, obwhol myclassA ist nicht x0XyoxXo0oOxXYyOoOYyOoxOXoYO0 hier wollen wier kein obfuscation, ich bemuehe mich anders zu formulieren und da werde ich kein cpp tags dafuer brauchen:
Wie deklariere ich in einer Klasse ein member vom Type template Klasse wo der einzige template Parameter beim Kompilier nicht bekannt ist?
-
cppnewb schrieb:
Du hast die Frage nicht verstanden es koennte villeicht liegen an dem <denglischen>, obwhol myclassA ist nicht x0XyoxXo0oOxXYyOoOYyOoxOXoYO0 hier wollen wier kein obfuscation, ich bemuehe mich anders zu formulieren und da werde ich kein cpp tags dafuer brauchen:
Wie deklariere ich in einer Klasse ein member vom Type template Klasse wo der einzige template Parameter beim Kompilier nicht bekannt ist?Du hast die Antwort nicht verstanden.
Und solche Sprüche sind unvorteilhaft sofern man Hilfe wünscht.Falls du irgendwo erst entscheidest von welchem Typ meineKlasse sein soll musst du
a) myClassB als template machen
oder
b) (wenn du schon früher myClassB brauchst) dich mit Abstrakten Basisklassen beschäftigen: nicht meineklasse<???> bla sondern abstrakte_basis* bla und dynamisch irgendwo allokieren.
-
b) (wenn du schon früher myClassB brauchst) dich mit Abstrakten Basisklassen beschäftigen: nicht meineklasse<???> bla sondern abstrakte_basis* bla und dynamisch irgendwo allokieren.
Die einzigen Abstrakt Basisklassen die ich mit bis jezt beschäftigt habe kann man weder allokieren noch instantieren sondern nur davon ableiten.aber ....
Ich denke ich bin in dem wrong forum gelandet.
-
Templates werden in C++ zur Kompilierzeit ausgewertet, von daher kannst du sie für dein Problem nicht verwenden.
Ich würde auch Laufzeitpolymorphie verwenden und mit abstrakten Basisklassen arbeiten. Dann kannst du die Typen, die dein Objekt annehmen kann, als abgeleitete Klassen definieren und so trotzdem generisch arbeiten (z.B. über virtuelle Funktionen).
Man kann natürlich keine abstrakten Basisklassen instantiieren, aber davon abgeleitete sehr wohl. Und diese kann man in einem Basisklassenzeiger speichern.
class Base { public: virtual void DoSomething() = 0; virtual ~Base() {} }; class Derived1 : public Base { public: virtual void DoSomething() {std::cout << "Derived1" << std::endl;} }; Base* Pointer = new Derived1(); // Derived1-Objekt über Base-Zeiger referenzieren Pointer->DoSomething(); // ruft die Methode von Derived1 auf delete Pointer;
-
Danke master und nexus fuer die antworten,Ja ich werde kombinieren static und dynamic polymorphism um meinen Problem zu loesen.
Grüße