CRuntimeClass-Frage
-
Hallo. Ich habe ehrlich gesagt das Prinzip noch nicht ganz verstanden, wozu diese Klasse da ist bzw. wo die jetzt genau untergebracht wird. Zu meiner Verwirrung trägt auch noch das erstellen dieser struktur (oder was da genau gemacht wird)in der initinstance. in der msdn steht zudem noch "The ability to determine the class of an object at run time is useful when extra type checking of function arguments is needed"
was meinen die damit? in welchem zusammenhang wo testen???
vielleicht wisst ihr ein wenig weiterdanke für eure hilfe
gruß
bunti
-
Du kannst CRuntimeClass dazu verwenden um zur laufzeit den type von einem Object festzustellen.
bsp:class CFoo: public CObject { DECLARE_DYNAMIC( CFoo) //... void DoSomethingInFoo(); }; void DoSomething(CObject *p) { // wir bekommen hier nen poitner auf ein CObject und // möchten nun DoSomethingInFoo aufrufen falls ein CFoo ist // Dazu kannst du CRuntimeClass verwenden: if(p->IsKindOf( RUNTIME_CLASS( CFoo) ) ) { // es ein CFoo object also können wir den nen cast machen CFoo* pFoo = (CFoo*)p; pFoo->DoSomethingInFoo(); } }
Dieses Zeug ist allerdings alles uralt. Das stammt noch aus VC++ 4 zeiten als der noch kein RTTI könnte. Mitlerweile kann VC++ auch so schöne sachen wie typeid oder dynamic_cast
bsp (macht das selbe wie oben):class CFoo: public CIrgendwas { //... void DoSomethingInFoo(); }; void DoSomething(CIrgendwas*p) { CFoo* pFoo = dynamic_cast<CFoo*>p; // hier kommt NULL zurück wenn p kein CFoo ist if(pFoo) pFoo->DoSomethingInFoo(); }