2015-05-08 76 views
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

是否有變通方法來實現的隱式轉換內置類型不使用中介類型?

+1

你想把強類型的Delphi變成一些瘋狂的腳本語言嗎? :) –

+0

'MyDateTime:='二十中午'; – Johan

+1

這聽起來像一個非常糟糕的主意......試圖讓任何語言更像VB6行爲似乎是錯誤的。 –

回答

4

記錄和類助手是擴展現有類型的方法範圍的唯一方法。助手不會承認運營商超載。

定義重載操作符的唯一方法是定義類型。

相關問題