Wieso funktioniert der downcast?
-
Hi,
ich frage mich warum das funktioniert:
m_pThread = dynamic_cast<ClientThread*>(AfxBeginThread( RUNTIME_CLASS(ClientThread), THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED ) );
wobei
private: ClientThread* m_pThread;
Ich dachte bisher:
class Base {...}; class D1: public base {...}; class D2: public D1{ ...}; // Base* pBase = new D1(); //Upcast, geht immer //dann D1* pD1 = dynamic_cast<D1*>( pBase ); //Downcast ok! D2* pD2 = dynamic_cast<D2*>( pBase ); //Upppsi
-
Was hat denken mit wissen zu tun?
-
Wo ist dein Problem?
ClientThread* m_pThread; m_pThread = dynamic_cast<ClientThread*>(AfxBeginThread( RUNTIME_CLASS(ClientThread), THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED ) );
Ich sehe da kein Problem, mittels "RUNTIME_CLASS(ClientThread)" erzeugt AfxBeginThread eine Instanz von class ClientThread und somit ist das casten doch ok (ClientThread muss von CWinThread abgeleitet werden).
-
Ok,
ich hatte überlesen das RUNTIME_CLASS ein Instanz von ClientThread erzeugt und ich somit dann bis zu ClientThread gefahrlos einen Downcast machen kann.
Weil ich auch solche Konstrukte im Internet gesehen hatte. Diese aber für Klassen eingesetzt werden, die neu interpertiert werden müssen.
ClientThread* m_pThread = reinterpret_cast<ClientThread*>(AfxBeginThread(..));