Ah, oui, ça je n'utilise plus volontairement depuis des années !
Pour être honnête, le besoin ne sait pas fait sentir, je serais capable d'en refaire mais toujours encapsuler !
J'en ai abusé, j'ai même basé la lecture de fichier à structure fixe exclusivement sur un jeu ce cast et case of !
Résultat, le parsage du fichier était 100 fois plus rapide que le découpage par succession de Copy !
Je triche avec les union, le Variant \ TVarData en est un parfait exemple !
Et quand j'en arrive a de tel extrémité, souvent justement avec des DLL fournis par les fabricants de matériel avec tout plein de CallBack, c'est encaspulé dans un objet !
Là, tu ne peux pas faire autrement, le coup classique, un code d'event, un pointeur a caster selon le code d'event et une la longueur du pointeur pour être sûr que ton sizeof(TRecordEventType1) correspond bien à ce que tu reçois, histoire que l'alignement ne soit pas le même
Une fois l'encapsulation, on en revient à des pratiques plus sages !
Idem, a un moment donné, il est plus simple d'utiliser un record et de l'écrire\lire sauvagement depuis un objet TCP, RS-232 ... je réserve ces pratiques à ce genre de cas !
Je l'ai fait récemment, pour un petit programme de test pour une collègue qui codait la EPROM d'une carte que l'on a fabriqué pour un client, j'utilisais partout un record composé d'un Header, Data et Footer,
Header donnant le type du Data (implictement sa longueur) ...
Footer contenant un Checksum du Header + Data !
Tient justement, dans le sujet
Déclaration de pointeur de fonction et structure, c'était justement du cast sauvage non protégé !
Et j'ai fini par réussir une variante sans cast !
Preuve que je le considère comme dangereux quand même !
Entièrement d'accord, il faut bannir le "hardcast", je ne pratique que is\as, c'est un peu le but de l'héritage quand même !
Partager