#pragma explicit_rtti
Nach oben zu Pragma-Direktiven (Übersicht) - Index
Inhaltsverzeichnis
Syntax (siehe Pseudogrammatik)
#pragma explicit_rtti [VISIBILITY-CLAUSE] VISIBILITY-CLAUSE := methods | properties | fields (VISIBILITY-EXPR) VISIBILITY-EXPR := [__published], [public], [protected], [private]
Beschreibung
Mit #pragma explicit_rtti
können Sie den Umfang der RTTI-Informationen steuern, die für Klassen und Records im Delphi-Stil erzeugt werden. Sie können explizit Member-Arten (Methoden, Felder usw.) mit spezieller Sichtbarkeit (public, protected usw.) angeben, für die RTTI-Informationen erzeugt werden sollen.
Eine #pragma explicit_rtti
-Spezifikation ist für den Rest der Datei für alle nachfolgend vorkommenden Deklarationen von Klassen-Membern oder so lange gültig, bis durch eine andere #pragma explicit_rtti
-Spezifikation die Einstellungen geändert werden.
Die Member-Arten (Methoden, Felder und Eigenschaften) können in beliebiger Reihenfolge angegeben werden. Das Argument für jede Spezifikation der Member-Art muss eine durch Komma getrennte Liste einer Kombination von Folgendem sein:
- __published
- public
- protected
- private
Wenn die Liste, wie die folgende, leer ist:
#pragma explicit_rtti methods()
dann erhält kein Member dieser Art RTTI-Informationen. Ist eine Member-Art nicht angegeben (wie Eigenschaften und Felder in dem Beispiel), dann wird die aktuelle Einstellung beibehalten.
Voreinstellung
Die Voreinstellung ist:
#pragma explicit_rtti methods (__published, public) properties (__published, public) fields(__published, public, protected, private)
In der folgenden Tabelle werden die Details dieser Einstellung dargestellt:
Member-Sichtbarkeit Member-Art |
__published | public | protected | private |
Methoden | + | + | ||
Eigenschaften | + | + | ||
Felder | + | + | + | + |
Die Member-Liste kann auch, wie in dem folgenden Beispiel, als Präprozessormakro definiert werden:
#define VIS_ANY __published, public, protected, private
#define VIS_NONE
#pragma explicit_rtti methods(VIS_ANY) properties(VIS_NONE)
Verwenden von #pragma explicit_rtti
mit LiveBindings
LiveBindings verwenden vom Delphi-Compiler für in Delphi geschriebene Klassen und Typen erzeugte RTTI (Laufzeit-Typinformationen). In einer C++-Anwendung mit ausschließlich in Delphi geschriebenen Klassen und Typen muss #pragma explicit_rtti
nicht verwendet werden. Dies gilt auch für alle Standard-VCL- oder FMX-Klassen, wie TForm, TButton, TMemo usw. Diese VCL- oder FMX-Klassen und Typen sind in Delphi geschrieben und verfügen bereits über vom Delphi-Compiler erzeugte RTTI-Informationen.
- Für LiveBindings in C++-Anwendungen mit Delphi-ähnlichen Klassen oder Typen, die Sie in C++ geschrieben haben, müssen Sie die Direktive
#pragma explicit_rtti methods()
verwenden. - Für LiveBindings in C++-Anwendungen mit Klassen oder Typen, die Sie in Delphi (wie VCL- oder FMX-Klassen und -Typen) geschrieben sind, sollten Sie die Direktive
#pragma explicit_rtti methods()
nicht verwenden.