Prise en charge de l'attribut __property implements dans C++Builder

De RAD Studio
Aller à : navigation, rechercher

Remonter à Spécificités du C++ - Index


C++Builder introduit l'attribut implements pour le mot clé__property. L'attribut implements vous permet d'implémenter efficacement les interfaces, sans impliquer l'héritage multiple. Auparavant, les classes basées sur TObject étaient autorisées pour implémenter des interfaces. Toutefois, l'implémentation des interfaces dans C++ était fastidieux par rapport à Delphi, principalement à cause de la façon dont l'héritage multiple fonctionne dans C++ (voir Implémentation des interfaces : Delphi et C++).

L'attribut implements est utile avec DAX : L'attribut __property implements a les avantages suivants pour ActiveX :

  • Il permet à une classe C++ d'utiliser facilement les assistants ActiveX fournis par DAX (Delphi ActiveX, le nouveau framework pour ActiveX de C++Builder XE).
  • Pour les projets C++Builder XE ActiveX, il facilite la transition de ATL à DAX.

L'attribut implements du mot clé C++ __property vous permet d'implémenter une interface en la spécifiant en tant qu'attribut ou champ d'une classe. Cette implémentation est analogue à la façon dont la directive Delphi implements permet à une classe d'implémenter une interface par délégation à une propriété.

Dans une instruction __property, l'attribut implements est placé en dernier, de façon similaire au placement de l'attribut __nodefault.

Syntaxe de l'attribut __property implements

Voici la syntaxe de l'attribut implements du mot clé __property :

 class TMyPersist: public TInterfacedObject
 {
   IPersist* FPersist;
 public:
   __property IPersist* Persist = {read=FPersist, write=FPersist, implements};
 };

La syntaxe omet l'initialisation du champ FPersist. Le constructeur de classe peut initialiser FPersist à un assistant DAX pour IPersist.

En réponse à l'attribut implements, le compilateur C++ enregistre l'interface (dans ce cas, IPersist) dans la table InterfaceTable du RTTI pour TMyPersist (ainsi que l'offset du champ FFooBar).

Remarque : L'attribut __property implements fonctionne seulement avec les champs, pas avec les accesseurs en lecture (getters) ou les accesseurs en écriture (setters).

Pour un exemple complet de code, voir Implémentation des interfaces : Delphi et C++.


Voir aussi