virtual template workaround?
-
Guten Abend!

Ich habe die Klassen: base A:public base B:public base
und einen globalen operator* der nur mit A und B funktionieren soll.Zur Verfügung habe ich jedoch immer nur base*
Woher weiß ich jetzt von welchem Typ die Zeiger sind damit ich diese dem operator* übergeben kann?
Unmöglich oder?

-
> Ich habe die Klassen: base A:public base B:public base
Bahnhof.
class base { }; class A : public base { }; class B : public base { }; A ax B bx double operator *(base b1, base b2) { ... } double d = ax * bx;Wo ist das Problem?
-
Das Problem ist dass ich nicht A ax und B bx schreiben kann sondern auf Grund der Programmstruktur nunmal nur base ZEIGER zur Verfügung stehen.
Mein Operatortemplate<typename T, typename U> double operator*(T t, U u);soll keine base* engegennehmen sondern nur ableitungen davon. An einer bestimmten Stelle muss ich die dem operator eben "manuell" übergeben und deswegen brauche ich die richtigen Typen.
Einfache Abfragen bei denne virtuelle Funktionen einen entsprechen String oder so zurückgeben kommt nicht in Frage da es sich bei den ABleitungen um stark verschachtelte templates handelt.
-
Chirurg schrieb:
Das Problem ist dass ich nicht A ax und B bx schreiben kann sondern auf Grund der Programmstruktur nunmal nur base ZEIGER zur Verfügung stehen.
Ich stelle fest: Der dynamische Typ ist Dir nur zur Laufzeit bekannt.
Chirurg schrieb:
Mein Operator
template<typename T, typename U> double operator*(T t, U u);soll keine base* engegennehmen sondern nur ableitungen davon.
Templates werden zur Kompilierzeit instanziiert.
Chirurg schrieb:
An einer bestimmten Stelle muss ich die dem operator eben "manuell" übergeben und deswegen brauche ich die richtigen Typen. Einfache Abfragen bei denne virtuelle Funktionen einen entsprechen String oder so zurückgeben kommt nicht in Frage da es sich bei den ABleitungen um stark verschachtelte templates handelt.
Du hast Dich da anscheinend in einem Design-Ansatz verrannt. Wozu muss denn operator* den dynamischen Typen kennen? Reicht nicht die abstrakte Schnittstelle? Dir kann man wahrscheinlich wesentlich besser helfen, wenn Du erklärst, was Du da eigentlich machen willst bzw was operator* berechnen soll und was das eigentlich für Typen sind. Überladen von Operatoren wie +,-,* etc und dynamische Polymorphie passen meist nicht gut zusammen. Du kannst Dein Problem bestimmt eleganter lösen.
Gruß,
SP
-
Sebastian Pizer schrieb:
Ich stelle fest: Der dynamische Typ ist Dir nur zur Laufzeit bekannt.
Templates werden zur Kompilierzeit instanziiert.Achso, ich verstehe. Vielen Dank, dass du dich meiner angenommen hast. Da habe ich offensichtlich etwas sehr grundlegendes nicht verstanden.
Ich werde somit auf eine abstrakte Basis zurückgreifen.