제네릭을 사용하여 다양한 유형의 타입으로 사용이 가능합니다.
type
IIF = class
class function Cast<T>(AExpression: Boolean; const ATrue, AFalse: T): T; static;
end;
implementation
{ IIF }
class function IIF.Cast<T>(AExpression: Boolean; const ATrue, AFalse: T): T;
begin
if AExpression then
Result := ATrue
else
Result := AFalse;
end;
Ex)
procedure TForm1.Button1Click(Sender: TObject);
var
My1: TMyRec;
My2: TMyRec;
My3: TMyRec;
begin
My1.Index := 1;
My1.Name := 'Test1';
My2.Index := 2;
My2.Name := 'Test2';
My3 := IIF.Cast<TMyRec>(False, My1, My2); //Record도 사용 가능
ShowMessage(My3.Name);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
//다양한 타입 사용 가능
ShowMessage(IIF.Cast<string>(True, '1', '2'));
ShowMessage(IntToStr(IIF.Cast<Integer>(True, 1, 2)));
end;
반응형