![]() |
is Operator bzw. RTTI
Hallo,
was ist das C++ Gegenstück zum Pascal IS Operator oder anders gefragt, wie kann ich in C++ die Run Time Type Information (RTTI) abrufen? |
AW: is Operator bzw. RTTI
![]()
Code:
Also: erst sicher umformen, dann prüfen, ob es geklappt hat und dann weitermachen. Delphi knallt beim 'As' Operator. Andere Programmiersprachen liefern nil/null/0 zurück.
NewType* myObjectAsNewType = dynamic_cast<NewType*>(&myObject); // 'as' a la C++
if (myObjectAsNewType) { // do something with myObjectAsNewType } Aber zu deiner Frage: Der 'is' Operator dürfte so umzusetzen sein,
Code:
if (dynamic_cast<NewType*>(myObject) != NULL) // <<--- hier war vorher ein blöder Fehler. Danke DeddyH
{ // now you can safely cast myObject } |
AW: is Operator bzw. RTTI
Öhm, müsste es nicht genau anders herum sein (!= NULL)? Allerdings gebe ich gern zu, dass meine C++-Kenntnisse nahe gegen 0 tendieren.
|
AW: is Operator bzw. RTTI
Wichtig zu wissen: Der dynamische Cast klappt nur, wenn es in der Klasse mindestens eine virtuelle Methode gibt; nur dann gibt es zur Laufzeit die nötigen Informationen. In der Regel möchte man in solchen Fällen eh den Dekonstructor virtuell machen.
EDIT: @DeddyH Jup. Allerdings ist es oft Blödsinn, das Ergebnis des Casts wegzuwerfen. Casten kostet manchmal, insbesondere wenn Mehrfachvererbung (zB. durch "Interfaces") in Spiel kommt. Außerdem wird der Code durch mehrfaches Casten nicht gerade lesbarer. |
AW: is Operator bzw. RTTI
Danke. Furtbichlers Code hat funktioniert, wobei DeddyH recht hat, dass im Falle, dass NULL zurückkommt, der dynamic cast gerade nicht erfolgreich war.
|
AW: is Operator bzw. RTTI
Zitat:
|
AW: is Operator bzw. RTTI
Spreche nicht wirklich C++ aber was ist mit
![]() |
AW: is Operator bzw. RTTI
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz