從D2007轉換爲XE2,我轉換該功能如何設置類型爲TEncoding的函數參數的默認值?
function Add_Line(FileStream : TFileStream; ALine : string) : boolean;
到
function Add_Line(FileStream : TFileStream; ALine : string; Enc: TEncoding = nil) : boolean;
var
AStr: ANSISTring;
begin
Result := True;
if Enc = nil then Enc := TEncoding.ANSI;
try
//Old FileStream.WriteBuffer(Pointer(ALine)^, Length(ALine));
if Enc = TEncoding.UTF8 then
AStr := UTF8Encode(ALine)
else
AStr := ANSIString(ALine);
FileStream.WriteBuffer(AStr[1], Length(ALine));
end;
except
Result := False;
end;
end;
理由:使用Add_Line儘可能少
更改代碼接受自動更改爲Unic ode,只在最後時刻寫入8位文本文件(這在XML和CSV中使用)。如果我們願意,將來我們仍然可以轉移到UTF-16文件。
我本來定義是這樣的:
function Add_Line(FileStream : TFileStream; ALine : string; Enc: TEncoding = TEncoding.ANSI) : boolean;
但是編譯器會抱怨;-)
就像是可能的東西嗎?
默認參數限制爲常量值是我總是贊成使用重載的一個原因。 –
超負荷從來沒有超過我的想法;-) –