LLVM dispose de sa propre alternative à la RTTI qui est une amélioration de la vitesse par rapport à la RTTI intégrée et qui permet la conversion dynamique en classes sans vtable (dyn_cast
). Cependant, il peut toujours être utilisé exactement de la même façon que dynamic_cast<>
, bien qu'il puisse être utilisé avec plus de classes.Est-ce que LLVM est une exception à la règle pour éviter les lancements dynamiques?
dyn_cast<>
template documentation
LLVM est une bonne réputation C++ si cela semble voler dans le visage de la commune disant que trop de moulages dynamiques est un signe de mauvaise conception, aussi connu comme une odeur de code. Sûrement un casting dynamique plus performant ne fait rien pour améliorer son utilisation dans la conception qu'un standard dynamic_cast
. Alors, qui est ici? Y a-t-il des cas où l'utilisation à grande échelle de la coulée dynamique est un bon choix de conception dans le code C++? Google affiche 690 occurrences de ce type de diffusion dynamique dans le code source du LLVM.
Uses of dyn_cast<>
in LLVM trunk
Je pense que cela montre simplement que "parfois, dans un grand projet de logiciel, vous devez contourner certaines des règles". Ou peut-être que «les compilateurs, ou les frameworks liés au compilateur, doivent se contorsionner avec une supercherie de bas niveau, ce qui est généralement une mauvaise idée». Cela ne signifie pas que nous pouvons conclure quoi que ce soit à propos de l'utilisation de 'dynamic_cast' * en général. * – jalf
Cela semble ignorer purement et simplement" les règles ". Je n'appellerais pas 690 occurrences en flexion des règles.Je ne vois rien de spécial au sujet des compilateurs ou des frameworks liés au compilateur qui signifient qu'ils sont autorisés à briser les croyances de conception. La conversion dynamique ici n'a aucun effet sur le code de sortie ou le code d'entrée du compilateur, cela fait simplement partie de la conception. Je pourrais continuer votre argumentation en disant que tout logiciel suffisamment volumineux ou complexe est autorisé à bafouer les règles de conception, ce qui remet sérieusement en question ce type de conseil de conception pour éviter 'dynamic_cast'. –