Dem anonymen Methoden in Delphi entsprechen Lambda-Funktionen in C++. Die Überstzung ist direkt:


Der Typ einer anonymen Methode kann als Referenz einer methode deklariert werden. DelphiXE2Cpp11 übersetzt dies in einen C++ std::function Typ:


type
  TFuncOfInt = reference to function(x: Integer): Integer;

var
  adder: TFuncOfInt;
begin
  adder :=  function(X: Integer) : Integer
  begin
    Result := X + Y;
    end;
  WriteLn(adder(22)); // -> 42
->

typedef std::function TFuncOfInt;

 TFuncOfInt adder;
 adder = [&](int X) -> int {
  int result = 0;
  result = X + Y;
  return result;
  };
 WriteLn(adder(22)); // -> 42


An Methodenreferenzen können sowohl anonyme Methoden zugewiesen werden, als auch normale Methoden. In C++ wird hierfür std::bind verwendet. Der Ausdruck für dies Zuweisung wird allerdings ziemlich kompliziert, da std::placeholder's zur Repräsentation der ungebundenen Variablen eingeführt werden müssen.



type
  TMethRef = Reference to procedure(X: Integer);

TAn3Class = class(TObject)
  procedure method(X: Integer);
end;

procedure Test;  
var
  m: TMethRef;
  i: TAn3Class;
begin
  // ...
  m := i.method;   
end;

->

typedef std::function TMethRef;

class TAn3Class : public System::TObject
{
  typedef System::TObject inherited;
public:
  void method(int X);
public:
  TAn3Class() {}
};

void Test()
{
  TMethRef m;
  TAn3Class* i = nullptr;
  // ...
  m = std::bind(&TAn3Class::method, i, std::placeholders::_1); 
}



   english english

 
Letzte Neuigkeiten
15.11.19
DelphiXE2Cpp11 Klassenreferenzen [mehr...]

16.10.19
Delphi2C# beta Angebot [mehr...]