Dans son article du Daily WTF daté du 12 octobre 2026, Remy Porter examine un exemple C++ anonymisé par Alan. Porter attribue le style du code à des développeurs qui maîtrisent mal certains concepts fondamentaux de la programmation orientée objet. Il critique aussi les analogies avec les taxonomies biologiques, qui peuvent donner une place excessive à l’héritage.
#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) reçoit un pointeur brut vers Animal. La méthode s’arrête si this ne désigne ni un Octopus ni un Squid. Elle appelle ensuite animal->mLimbs->GetFirstTentacle(). Lorsqu’un Limb est trouvé, elle exécute limb->AttachToAnimal(this).
IS_INSTANCE_OF porte cette règle. La macro convertit objectPointer en Organism* au moyen d’un cast de style C, puis passe le résultat à dynamic_cast<className*> avant de vérifier NULL. En C++, un cast de style C laisse le compilateur choisir la conversion selon le contexte et peut aller jusqu’à reinterpret_cast, qui ignore les informations de type. IS_MEMBER_OF n’est qu’un alias temporaire.
Le commentaire de la macro affirme que dynamic_cast réussit toujours pour le type de pointeur fourni et propose Organism comme solution. Porter juge cette lecture erronée. Une conversion impossible renvoie NULL. dynamic_cast peut aussi effectuer un crosscast entre des branches sœurs qui partagent une base publique. Un cast vers Dog* depuis un pointeur Cat* peut réussir si l’objet le plus dérivé contient les deux sous-objets.
Dans le code appelant, IS_INSTANCE_OF(animal, Felid) est suivi d’un autre cast de style C vers Felid*. Un commentaire voisin reconnaît que l’auteur espère seulement obtenir le comportement attendu. Porter classe cette approche parmi les anti-patterns de sélection par type. Le système de types et le polymorphisme devraient porter la contrainte. Un dispatch dynamique employé avec soin peut représenter proprement un domaine. L’article cite The Design and Evolution of C++ de Bjarne Stroustrup, qui avertit que RTTI peut permettre de contourner les mécanismes du langage et produire un compromis médiocre entre syntaxe de type C et comportement d’exécution associé à Smalltalk.




Commentaires
Pas encore de commentaire — écris le premier.
Lance la discussion
Pas de compte ni de mot de passe — saisis simplement ton adresse e-mail et nous t’envoyons un lien de connexion à usage unique. Première visite ? Tout se met en place automatiquement.
Ton évaluation sera appliquée automatiquement après ta connexion.
Vérifie ta boîte mail
Nous avons envoyé un lien de connexion à …. Ouvre-le sur cet appareil — cet onglet te connectera automatiquement.
Rien reçu ? Vérifiez le dossier spam — et marquez le message « Non spam » pour qu'il arrive directement la prochaine fois.