Zitat Zitat von dml Beitrag anzeigen
Mein Problem war, das ich ein Objekt nach Bedarf umwandeln wollte:
Code:
 mask     = (RecipeMask) mask; 
...
 mask     = (BookMask) mask;
Doch das ist schon logisch nicht möglich.
Das ist schon möglich, nur muss man sich das Resultat des Casts merken, d.h. die Typinformation nicht gleich wieder verwerfen so wie da in diesem Beispiel der Fall ist.

Was du hier hast sind quasi zwei Teile:
1) der Cast, z.b. (BookMask*)mask, besser static_cast<BookMask*>(mask);

2) eine Zuweisung: mask = resultat_des_cast

Nach (1) "sieht" der Compiler den gecasteten Typ, also BookMask*.
"mask" ist aber vom Typ Mask*, d.h. nach (2) "sieht" der Compiler wieder nur die Typinformation Mask*


Zitat Zitat von dml Beitrag anzeigen
Da bei einer Typumwandlung der neue Typ eh neu aufgebaut werden muss. Also einen Konstruktor durchläuft.
Nein. Der Pointercast ändert nichts am Objekt selbst, er verändert lediglich wie der Compiler das Objekt hinter dem Pointer betrachtet.

Code:
BookMask *bookMask = new BookMask;

Mask *mask = bookMask; 

BookMask *bookMask2 = bookMask;
BookMask *bookMask3 = static_cast<BookMask*>(mask);
Alle view Pointer zeigen auf das selbe Objekt.

Zitat Zitat von dml Beitrag anzeigen
Hinzu kam, das das Signal erst nach Abarbeitung des Slots beendet wird und ich genau in dem Slot das Objekt löschen und neu initialisieren wollte.
Das sollte schon klappen. Der Code, der das Signal aussendet arbeitet davor und danach nur mit dem Basistyp, oder?

Ciao,
_