Remy Porters Beitrag im Daily WTF vom 12. Oktober 2026 untersucht ein von Alan anonymisiertes C++-Beispiel. Laut Porter stammt die Codebasis von Entwicklern, die zentrale objektorientierte Konzepte nur unsicher beherrschen. Er kritisiert außerdem biologische Taxonomie-Vergleiche für OO-Konzepte, weil sie die Bedeutung der Vererbung überhöhen können.
#define IS_INSTANCE_OF(objectPointer, className) ((bool) (dynamic_cast<className *>(((Organism *) objectPointer)) != NULL))
#define IS_MEMBER_OF(objectPointer, className) IS_INSTANCE_OF(objectPointer, className)Animal::StealTentacle(Animal *animal) nimmt einen rohen Animal*-Zeiger entgegen. Die Methode kehrt zurück, wenn this kein Octopus oder Squid ist. Danach ruft sie animal->mLimbs->GetFirstTentacle() auf. Bei einem gefundenen Limb folgt limb->AttachToAnimal(this).
IS_INSTANCE_OF setzt diese Schranke um. Das Makro wandelt objectPointer per C-Style-Cast in Organism* um, übergibt den Wert an dynamic_cast<className*> und prüft auf NULL. Ein C-Style-Cast lässt den Compiler je nach Kontext zwischen mehreren Cast-Formen wählen und kann bis zu reinterpret_cast gelangen, der Typinformationen ignoriert. IS_MEMBER_OF ist nur ein vorläufiger Alias.
Der Kommentar zum Makro behauptet, dynamic_cast liefere für den übergebenen Zeigertyp immer ein gültiges Ergebnis, und schlägt Organism als Umweg vor. Porter hält diese Deutung für falsch. Ein nicht möglicher Cast liefert NULL. dynamic_cast kann außerdem zwischen Seitenzweigen mit einer gemeinsamen öffentlichen Basisklasse wechseln. Ein Cast von einem Cat*-Zeiger zu Dog* kann funktionieren, wenn das vollständig erzeugte Objekt beide Teilobjekte enthält.
Im tatsächlichen Einsatz folgt auf IS_INSTANCE_OF(animal, Felid) ein weiterer C-Style-Cast zu Felid*. Ein naher Kommentar räumt sinngemäß ein, dass der Autor nur auf das erwartete Ergebnis hofft. Porter bezeichnet das als Type-Switch-Anti-Pattern. Die Typinformationen und die Polymorphie sollten die Einschränkung ausdrücken. Sorgfältig eingesetztes Dynamic Dispatch kann ein Domänenmodell sauber abbilden. Der Beitrag zitiert Bjarne Stroustrups The Design and Evolution of C++, wo vor RTTI-Code gewarnt wird, der Sprachmechanismen umgeht und eine schlechte Mischung aus C-ähnlicher Syntax und Smalltalk-ähnlichem Laufzeitverhalten erzeugt.




Kommentare
Noch keine Kommentare — schreib den ersten.
Starte die Diskussion
Kein Konto, kein Passwort nötig — gib einfach deine E-Mail-Adresse ein, wir senden dir einen einmaligen Anmelde-Link. Beim ersten Mal bist du damit automatisch angemeldet.
Deine Bewertung wird nach der Anmeldung automatisch übernommen.
Schau in dein Postfach
Wir haben einen Anmelde-Link an … gesendet. Öffne ihn auf diesem Gerät — dieser Tab meldet dich automatisch an.
Nichts angekommen? Wirf einen Blick in den Spam-Ordner — und markiere die Mail dort als „Kein Spam“, dann landet sie künftig direkt im Postfach.