Procedural types

Top  Previous  Next

New features since Delphi 7 > Generics > Procedural types

 

 

The procedure type and the method pointer can be declared with type parameters. Parameter types and result types can also use type parameters.

 

 

 type

   TMyProc<T> = procedure(Param: T);

   TMyProc2<Y> = procedure(Param1, Param2: Y) of object;

 type

   TFoo = class

     procedure Test;

     procedure MyProc(X, Y: Integer);

   end;

 

 

 procedure sample(Param: Integer);

 begin

   WriteLn(Param);

 end;

 

 procedure TFoo.MyProc(X, Y: Integer);

 begin

   WriteLn('X:', X, ', Y:', Y);

 end;

 

 procedure TFoo.Test;

 var

   X: TMyProc<Integer>;

   Y: TMyProc2<Integer>;

 begin

   X := sample;

   X(10);

   Y := MyProc;

   Y(20, 30);

 end;

 

procedure Test;

var

  F: TFoo;

begin

  F := TFoo.Create;

  F.Test;

  F.Free;

end;

 

->

 

 

template<typename T> using TMyProc = std::function<void (T)>;

template<typename Y> using TMyProc2 = std::function<void (Y, Y)>;

//---------------------------------------------------------------------------

class TFoo : public System::TObject

{

  typedef System::TObject inherited;

public:

  void Test();

  void MyProc(int X, int Y);

public:

  TFoo() {}

  System::TClass ClassType() const;

};

 

//---------------------------------------------------------------------------

void sample(int Param)

{

  WriteLn(Param);

}

//---------------------------------------------------------------------------

void TFoo::MyProc(int X, int Y)

{

  { Write(L"X:"); Write(X); Write(L", Y:"); WriteLn(Y); };

}

//---------------------------------------------------------------------------

void TFoo::Test()

{

  TMyProc<int> X;

  TMyProc2<int> Y;

  X = sample;

  X(10);

  Y = std::bind(&TFoo::MyProc, this, std::placeholders::_1, std::placeholders::_2);

  Y(20, 30);

}

 

 

 



This page belongs to the DelphiXE2Cpp11 Documentation

DelphiXE2Cpp11 home  Content