#pragma explicit_rtti
Remonter à Présentation des directives pragma - Index
Sommaire
Syntaxe (voir Pseudo-grammaire)
#pragma explicit_rtti [VISIBILITY-CLAUSE] VISIBILITY-CLAUSE := methods | properties | fields (VISIBILITY-EXPR) VISIBILITY-EXPR := [__published], [public], [protected], [private]
Description
Utilisez #pragma explicit_rtti
pour contrôler le volume d'informations RTTI qui sont générées par les classes et les enregistrements de style Delphi. Vous pouvez formuler de façon explicite les types de membres (méthodes, champs, et ainsi de suite) avec une visibilité spécifique (public, protected, et ainsi de suite) qui doivent avoir des informations RTTI.
Une spécification #pragma explicit_rtti
s'applique à chaque déclaration de membre de classe rencontrée par la suite pour le reste du fichier, ou jusqu'à ce qu'une autre spécification #pragma explicit_rtti
change les paramètres.
Les types de membres (méthodes, champs et propriétés) peuvent être dans n'importe quel ordre. L'argument pour chaque spécification de type de membre doit être une liste, délimitée par des virgules, de toute combinaison de :
- __published
- public
- protected
- private
Si la liste est vide, comme dans :
#pragma explicit_rtti methods()
alors aucun des membres de ce type n'est exposé. Quand un type de membre n'est pas spécifié (comme ne le sont pas les propriétés et les champs dans l'exemple ci-dessus), le paramétrage en cours est alors préservé.
Paramétrage par défaut
Le paramétrage par défaut est :
#pragma explicit_rtti methods (__published, public) properties (__published, public) fields(__published, public, protected, private)
Le tableau suivant illustre ce paramétrage :
Visibilité du membre Type du membre |
__published | public | protected | private |
Méthodes | + | + | ||
Propriétés | + | + | ||
Champs | + | + | + | + |
Il est possible de définir la liste des membres en tant que macro de préprocesseur, comme dans l'exemple suivant :
#define VIS_ANY __published, public, protected, private
#define VIS_NONE
#pragma explicit_rtti methods(VIS_ANY) properties(VIS_NONE)
Utilisation de #pragma explicit_rtti
avec LiveBindings
LiveBindings utilise les informations RTTI (de type à l'exécution), générées par le compilateur Delphi pour les classes et les types qui sont écrits dans Delphi. Une application C++ n'a pas besoin d'utiliser #pragma explicit_rtti
si elle utilise seulement les classes et les types écrits dans Delphi. Cela inclut toutes les classes standard VCL ou FMX, telles que TForm, TButton, TMemo, et ainsi de suite. Ces classes et types VCL ou FMX ont été écrits dans Delphi, et ont déjà des informations RTTI générées par le compilateur Delphi.
- Si vous voulez utiliser LiveBindings dans des applications C++ utilisant des classes et types Delphi écrits dans C++, vous devez utiliser la directive
#pragma explicit_rtti methods()
. - Si vous voulez utiliser LiveBindings dans des applications C++ ayant des classes ou types écrits dans Delphi (tels que les classes et types VCL ou FMX), vous ne devez pas utiliser la directive
#pragma explicit_rtti methods()
.