4
我可以使用類操作符來使用中間保持記錄的字符串。
這樣我可以隱式轉換內置類型。是否有解決方法讓類操作員可以使用內置類型
program TestNewStringHelper;
{$APPTYPE CONSOLE}
uses
System.SysUtils;
type
TStringRecord = record
private
Data: string;
public
class operator Implicit(const a: TStringRecord): Integer; inline;
class operator Implicit(const a: string): TStringRecord; inline;
end;
{ TStringRecord }
class operator TStringRecord.Implicit(const a: string): TStringRecord;
begin
pointer(Result.Data):= pointer(a);
end;
class operator TStringRecord.Implicit(const a: TStringRecord): Integer;
begin
Result:= StrToInt(a.Data);
end;
var
input: TStringRecord;
output: integer;
begin
input:= '42';
output:= input;
WriteLn(IntToStr(output));
ReadLn;
end.
我想這樣做,而不是:
var
input: string;
output: integer;
begin
input:= '42';
output:= input; //Class operator magic
WriteLn(IntToStr(output));
ReadLn;
end.
根據在線幫助:
注:類和記錄傭工不支持運算符重載。
和http://qc.embarcadero.com/wc/qcmain.aspx?d=72253
是否有變通方法來實現的隱式轉換內置類型不使用中介類型?
你想把強類型的Delphi變成一些瘋狂的腳本語言嗎? :) –
'MyDateTime:='二十中午'; – Johan
這聽起來像一個非常糟糕的主意......試圖讓任何語言更像VB6行爲似乎是錯誤的。 –