Je continue mes recherches sur le C++, j'ai passé le stade constructeurs pour passer au "constructeurs virtuels" (uniquement VCL)
Je l'utilise souvent pour le Pattern Strategy des mes développements, en fait souvent couplé avec le Pattern RegisterClass (oui ça c'est typique Borland ce n'est pas un Pattern reconnu ailleurs, quoi qu'il y a la Registry assez utilisé en PHP sous Zend par exemple mais qui s'implique aux instances et non aux classes)
L'utilisation la plus connue c'est finalement la DFM, effectivement, le TComponent introduit le premier constructeur virtuel, ensuite tous les TControl on aussi un constructeur virtuel
le problème c'est que l'on a pas le code qui créé les composants par le parsage du DFM (il en codé en Delphi dans TStream::ReadComponent, TReader::ReadData ...) et utilise FindClass et utilise la Réference de Class (équivalent du MetaClass) pour instancier n'importe quel objet qui hérite du TComponent sans savoir ce qu'il est vraiment, ensuite via les RTTI, il modifie les propriétés publiées de l'objet
J'aimerais trouvé une traduction C++, pour ce genre d'utilisation
Delphi
C++
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 type TClassVCLDelphiClass = class of TClassVCLDelphi; ... var ClassVCLType: TClassVCLDelphiClass; Obj: TClassVCLDelphi; ... ClassVCLType := FindClass(ChaineNomDeClasse); Obj := ClassVCLType.Create(); Obj.MethodeVirtuelle(); // lance la méthode de la bonne classe !
évidemment ce n'est pas la bonne syntaxe, si quelqu'un a déjà tenté cela !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 typedef TMetaClass* TClassVCLDelphiClass; TClassVCLDelphiClass ClassVCLType = FindClass(ChaineNomDeClasse); TClassVCLDelphi *Obj = new ClassVCLType(); // ça Compile pas Obj->MethodeVirtuelle();
Sinon, je serais réduit à faire des séries if if if ou des cases ...
Partager