In C++ gibt es kein Pendant zu den unterstürtzenden Klassen und Records in Delphi. Dennoch ist es mit DelphiXE2Cpp11 möglich Delphi Code, der unterstützende Klassen verwendet, automatisch nach C++ zu übersetzen. Dies wird im folgenden Beispiel demonstriert:


TStringsHelper = class Helper for TBase
private 
  function GetTheObject(const AString: String): TObject; 
  procedure SetTheObject(const AString: String; const Value: TObject); 
public 
  property ObjectFor[const AString : String]: TObject Read GetTheObject Write SetTheObject; 
end;

wird für den C++Builder folgendermaßen übersetzt:


class TStringsHelper
{
  public:
  TStringsHelper(TBase* xpClass) : m_pClass(xpClass) {}
private:
  TObject* __fastcall GetTheObject(const String& AString);
  void __fastcall SetTheObject(String& AString, TObject* Value);
public:
  __property TObject* ObjectFor[const String& AString] = { read = GetTheObject, write = SetTheObject };
private:
  TBase* m_pClass;
};

Für andere Compiler als dem C++Builder werden die Properties zu Set- unf Get-Methoden. Wenn S eine Instanz von TBase ist, wird eine Zuweisung eines TObject's wie in:

S.ObjectFor['a'] := Object;

zu:

TStringsHelper(s).ObjectFor[L"a"] = Object;

Der Trick besteht darin, dass Aufrufe von Funktionen der unterstützenden Klasse umgeleitet werden an eine Instanz der unterstützten Klasse innerhalb der lokalen unterstützenden Klasse. Die Set-Methode von TStringHelper sieht dann z.B. folgendermaßen aus:


void __fastcall TStringsHelper::SetTheObject(String& AString, TObject* Value)
{
  int idx = 0;
  idx = m_pClass->IndexOf(AString);
  if(idx >- 1)
    m_pClass->Objects[idx] = Value;
}



   english english

 
Letzte Neuigkeiten
15.11.19
DelphiXE2Cpp11 Klassenreferenzen [mehr...]

16.10.19
Delphi2C# beta Angebot [mehr...]