Nested routines with C++98

Top  Previous  Next

What is translated > Routines > Nested routines > Nested routines with C++98

There aren't nested functions in C++. For C++98 in contrast to C++11 the automatic translation of nested Delphi functions replaces the inner functions by new free functions or member functions. The parameters  and the declared variables of the outer function are passed to these new functions.

 

 

type

 

TNested = class

public

  iClassVar : Integer;

  function Test(iOuterParam, iTwiceParam : Integer; s : String): Integer;

end;

 

implementation

 

function TNested.Test(iOuterParam, iTwiceParam : Integer; s : String): Integer;

const

  cSeparate = ':';

var

 iFunctionVar : Integer;

 

 procedure NestedTest(iInnerParam, iTwiceParam : Integer);

 begin

   result := iClassVar + iOuterParam + iFunctionVar + iInnerParam + iTwiceParam;

 end;

 

begin

 iClassVar := 1;

 iFunctionVar := 2;

 NestedTest1(3, 4);

 result := result + iTwiceParam;

end;

 

 

->

 

class TNested : public System::TObject

{

  #include "Test_friends.inc"

public:

  int iClassVar;

  void __fastcall NestedTest(int iInnerParam, int iTwiceParam, int& result, int& iOuterParam, int& iFunctionVar);

  int __fastcall Test(int iOuterParam, int iTwiceParam, System::String s);

};

 

 

void __fastcall TNested::NestedTest(int iInnerParam, int iTwiceParam, int& result, int& iOuterParam, int& iFunctionVar)

{

  result = iClassVar + iOuterParam + iFunctionVar + iInnerParam + iTwiceParam;

};

 

int __fastcall TNested::Test(int iOuterParam, int iTwiceParam, String s)

{

  int result = 0;

  const WideChar cSeparate = L':';

  int iFunctionVar = 0;

  iClassVar = 1;

  iFunctionVar = 2;

  NestedTest(3, 4, result, iOuterParam, iFunctionVar);

  result = result + iTwiceParam;

  return result;

}

 

 

 

It is taken into account that at multiple nesting possible parameters which aren't needed in a function itself but in a function subordinated to it are passed through.

 

In contrast to the solution with lambda functions however, there may be difficulties with undeclared types at the declaration of the inner functions.

 

 

Other possibilities to translate nested functions are discussed here:

 

http://www.gotw.ca/gotw/058.htm

 

 



This page belongs to the DelphiXE2Cpp11 Documentation

DelphiXE2Cpp11 home  Content