Prise en charge de l'attribut __property implements dans C++Builder
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
- Implémentation des interfaces : Delphi et C++
- mot clé __property
- Extensions de mots clés C++
- Implémentation de IInterface
- Agrégation
- Interfaces Delphi
- C++Builder utilise DAX pour ActiveX et COM
- Utilisation de l'attribut implements pour la délégation (Delphi)
- Hiérarchie des classes dans un contrôle ActiveX (DAX)