Search code examples
delphidelphi-2007variable-initializationopen-array-parameters

How can I pass a group of objects to a function for creation?


So I'm working in Delphi 2007 and I am cleaning up my code. I have come to notice that in a great many procedures I declare a number of different variables of the same type.

for example the one procedure I am looking at now I declare 4 different string lists and I have to type var1 := TStringList.Create for each one.

I had the idea to make a procedure that took in an open array of variables, my list of 4 variables and then create them all. The call would be something like this

CreateStringLists([var1,var2,var3,var4]);

But as to my knowledge you cannot pass the open array by reference and therefore not do what I was hoping to. Does anyone have any interesting ideas about this?


Solution

  • You can do anything (or nearly anything) with Delphi. I don't recommend the following code to use, just to know that the trick is possible:

    type
      PStringList = ^TStringList;
    
    procedure CreateStringLists(const SL: array of PStringList);
    var
      I: Integer;
    
    begin
      for I:= 0 to High(SL) do begin
        SL[I]^:= TStringList.Create;
      end;
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    var
      SL1, SL2, SL3: TStringList;
    
    begin
      CreateStringLists([@SL1, @SL2, @SL3]);
      SL3.Add('123');
      Caption:= SL3[0];
      SL1.Free;
      SL2.Free;
      SL3.Free;
    end;