klasse mit variabler anzahl an templates. keine variadic templates möglich
-
Hallo alle zusammen!
Ich habe folgendes Problem und hoffe jemand kann mir helfen:
(Gleich vorweg: ich kann kein C++11 oder höher verwenden!)Ich habe eine "statischen" Klasse A, die im Prinzip nur 1x initialisiert werden muss, der aber relativ speicherintensiv ist und etwas länger braucht um initialisiert zu werden.
Und dann habe ich noch eine Template Klasse B, von der es mehrere Instanzen gibt (minimum 1).
So weit so gut.
Ich möchte jetzt gerne Klasse A mit allen Instanzen der Template Klasse B interagieren lassen (Klasse B interagiert nicht mit anderen Instanzen von Klasse B). Wie kann ich das realisieren??
Zurzeit habe ich eine (funktionierende) Version in der Klasse A auch eine Template Klasse ist, aber wünschenswerterweise würde ich gerne Klasse A von B entkoppeln, sodass ich nur 1x die "fette" Klasse A habe, die mit verschiedenen Template Instanzen von Klasse B interagiert....
Bin etwas ratlos und freue mich über Input

Thx, schlumpf_schlumpf
-
"Interagieren" ist sehr allgemein. Was ist das konkrete Problem? Muss der genaue Typ bekannt sein? Warum? Codebeispiele!
-
class BBase {}; template <typename T> class B : BBase {}; class A { std::vector<BBase*> bs; // Instanzen von B's };?
-
danke, werd ich mal probieren!

-
Sorry, ich steh grad voll auf der Leitung...
//Wenn meine Klasse B so aussieht: class BBase { //virtual void add ist nicht möglich wegen dem Typ }; template <typename T> class B : BBase { std::vector<T> vec; public: void add(T t){ vec.push_back(t); } } // und ich über Klasse A auf B zugreifen will, in etwa so: class A { std::vector<BBase*> bs; // Instanzen von B's public: void addB(){ bs.push_back(new BBase); } void add_value_to_B(T t){ //nicht möglich, da A keine Template Klasse ist bs.back()->add(t); //nicht möglich, da ich keine virtuelle Funktion add in BBase haben kann } };wie mach ich das?
-
Mal angenommen, man könnte den Code so übersetzen: wie wolltest du sicherstellen, dass das b am Ende des Vectors zu dem T passt, das du gerade übergeben willst?
-
Das ist natürlich absolut richtig. Aber da es eh nicht möglich ist, dass so zu machen, habe ich auch gar nicht darauf geachtet.
Ich löse es jetzt ganz anders:
Von Klasse A gibt es jetzt eine Instanz. Von Klasse B gibt es beliebig viele Instanzen und sie werden im Konstruktor mit A (als Referenz) initialisert.
So kann ich auf die Dinge von Klasse A zugreifen, die ich brauche.template <typename Type> class B{ A& a; public: B(A& ar) : a(ar) { } };Es ist zwar keine schöne Lösung, aber etwas anderes ist mir nicht eingefallen

Bin immer noch für Vorschläge offen
-
schlumpf_schlumpf schrieb:
Bin immer noch für Vorschläge offen

manni66 schrieb:
"Interagieren" ist sehr allgemein. Was ist das konkrete Problem? Muss der genaue Typ bekannt sein? Warum? Codebeispiele!