Ce sujet fait suite à mon précédent : Interface, Héritage et Supports !
Je suis enfin en train de migrer de BCB2007 à BCBXE2 !
J'avais remarqué, il y a quelques mois, un nouveau Warning W8130 L'interface '%s' ne dérive pas de IUnknown. (Les interfaces doivent dériver de IUnknown) (C++)
J'utilise des interfaces (je dois en avoir déjà plus 50) dans mon code
Aussi bien de interface C++ qui sont juste des "classes abstraites pures"
et des DelphiInterface (avec Supports, GUID, IInterface, TInterfacedObject ...)
Que pensez vous de mélanger Interface C++ et Delphi Interface ?
Pour dans le code, c'est limpide :
Si c'est une Interface C++, je sais précisement quoi faire avec, il n'y aura pas de cast sauvage.
Si c'est une DI, j'interroge Supports pour savoir ce qu'elle sait ou pas faire, le case est donc sagement encapsulé
En fait, les DI sont les Factory des Interface C++ !
Je pourrais retirer le Warning du projet mais je n'aime pas trop faire cela, si les developpeurs VCL ont jugé que cela nécessitait un Warning c'est qu'il y a une bonne raison !
En théorie, je pourrais tenter un #pragma option push -w-diu mais ce commutateur n'est pas documenté, donc périlleux
Je ne vois pas trop l'intérêt de forcer le développeur à faire IUnknown sachant que cela oblige l'implémentation de QueryInterface, AddRef et Release !
N'est-ce pas un anti-pattern YAGNI ?
Que pensez-vous de cette nouvelle obligation "Les interfaces doivent dériver de IUnknown" ?
A Savoir que le Warning n'apparait que lors de l'implémentation par une classe héritant de TObject
Avec une implémentation avec une classe C++ strict (non VCL) d'une interface C++, pas de Warning, heureusement !
Souvent ce genre de Warning sont le signe qu'ils vont finir par obliger d'hériter et d'implémenter IUnknown (comme c'est le cas en Delphi d'ailleurs)
PS : J'ai essayé de faire court (si si je vous assure, j'ai retiré au moins la moitié de mes billevesées)
Partager