Returning arrays |
Top Previous Next |
What is translated > Types > Arrays > Returning arrays
In Delphi arrays can be returned from functions by value, but this is not allowed for C-style arrays in C++. In C++ arrays are passed to functions by reference instead. That's what Delphi2Cpp*) does too. If TObjectArray is defined as:
type TObjectArray = array[1..3] of TObject;
or in C++:
typedef TObject* TObjectArray[3/*# range 1..3*/];
the following Delphi function:
function CreateArray: TObjectArray; begin Result[1] := TObject.Create; Result[2] := TObject.Create; Result[3] := TObject.Create; end;
becomes in C++ to:
TObjectArray& CreateArray(TObjectArray& result, uniquetype u) { result[1 - 1] = new TObject(); result[2 - 1] = new TObject(); result[3 - 1] = new TObject(); return result; }
This function receives the array as reference parameter, so it can return the reference without danger, There is a second uniquetype parameter, which distinguishes the function from a possible overload:
procedure CreateArray(var arr: TObjectArray); void CreateArray(TObjectArray& arr)
The function call:
procedure Test; var arr2: TObjectArray; begin arr2 := CreateArray; end;
is translated by Delphi2Cpp to
void Test() { TObjectArray arr2; CreateArray(arr2, uniquetype()); }
In this example the returned array reference isn't used at all. It is used however, if CreateArray delivers the value for another function:
procedure ProcessArray(arr: TObjectArray);
procedure Test2; begin ProcessArray(CreateArray); end;
This becomes in C++:
void Test2() { TObjectArray arrayreturn__0; ProcessArray(CreateArray(arrayreturn__0, uniquetype())); }
At first Delphi2Cpp creates a local TObjectArray, which is passed to the CreateArray function and finally is directly passed as reference parameter to the other function. The treatment of array properties is similar.
*) In contrast to Delphi2Cpp the old Delphi2Cpp in such cases created a helping array in the file scope which is used for an intermediate copy of the array
|
This page belongs to the Delphi2Cpp Documentation |
Delphi2Cpp home Content |