2、3、4 などのパラメーターを使用して、一連のオーバーロードされたバージョンを作成できます。例えば:
procedure CreateStringLists(var L1, L2: TStringList); overload;
procedure CreateStringLists(var L1, L2, L3: TStringList); overload;
procedure CreateStringLists(var L1, L2, L3, L4: TStringList); overload;
procedure CreateStringLists(var L1, L2: TStringList);
begin
L1 := nil;
L2 := nil;
Try
L1 := TStringList.Create;
L2 := TStringList.Create;
Except
FreeAndNil(L2);
FreeAndNil(L1);
raise;
End;
end;
// etc.
これを行う場合、コードを生成するスクリプトを作成します。
余談ですが、私自身のコードではInitialiseNil(L1, L2)
、その関数の開始時とFreeAndNil(L2, L1)
例外ハンドラーに記述します。InitialiseNil
とFreeAndNil
は、再実行できるようにコードベースにコメントとして含まれている非常に単純な Python スクリプトによって生成される関数です。上で定義したようなCreareStringLists
ルーチンは、それらすべてを一度に解放する一致するルーチンがある場合にのみ役立ちます。これにより、次のように記述できます。
CreateStringLists(L1, L2);
Try
// do stuff with L1, L2
Finally
FreeAndNil(L2, L1);
End;
最後に、私は必ずしもこれを行うと言っているわけではありませんが、これは質問に対する素朴で直接的な答えとして意図されています. @TED が述べているように、これを行う必要があることは、コードベースのより深い問題を示唆しています。