The corresponding C++ feature to Delphi's anonymous methods are lambda expressions. The translation is quite straight forward:
An anonymous method type can be declared as a reference to a method. It becomes in C++ to a std::function type:
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::functionTFuncOfInt;
TFuncOfInt adder;
adder = [&](int X) -> int {
int result = 0;
result = X + Y;
return result;
};
WriteLn(adder(22)); // -> 42
As well as anonymous methods can be assigned to a method reference (see above), a normal method can be assigned to it. In C++ this is done by means of std::bind. The expression of this assignment looks quite complicated however, because std::placeholders are needed to represent unbound variables.
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::functionTMethRef;
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);
}
Deutsch
| Latest News |
|
10/28/24
Delphi2Cpp 2.5: Symbol names matching declaration case [more...] |
|
08/26/24
Delphi2Cpp 2.4: Updated to RAD Studio 12.1 Athens [more...] |
|
"Thanks for your great work, really appreciate the work you have done on zlib and compiling ... test case." Mattewada, Udayabhaskar
Nokia India
02/01/2021
|
|
[from case study...] "A masterpiece -- Delphi2Cpp has exceeded all my expectations by far." Tony Hürlimann
virtual-optima
08/20/2011
|
|
"First off, I have to say WOW! Delphi2Cpp is doing a *fantastic* job!" Daniel Flower
linkrealms
01/15/2011
|
|
This website is generated from plain text with [Minimal Website ]
|
Minimal Website
is made with TextTransformer
|
TextTransformer is made with Borland
CBuilder
|