delphi – 如何为TEncoding类型的函数参数设置默认值?
发布时间:2020-12-15 04:23:15 所属栏目:大数据 来源:网络整理
导读:从D2007转换为XE2,我转换了这个功能 function Add_Line( FileStream : TFileStream; ALine : string) : boolean; 至 function Add_Line( FileStream : TFileStream; ALine : string; Enc: TEncoding = nil) : boolean;var AStr: ANSISTring;begin Result :=
从D2007转换为XE2,我转换了这个功能
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更改代码 我本来希望定义类似的东西: function Add_Line( FileStream : TFileStream; ALine : string; Enc: TEncoding = TEncoding.ANSI) : boolean; 但编译器抱怨;-) 有可能吗? 解决方法
默认参数必须是编译时常量,但如果您需要更高级的东西,则可以创建重载:
function Add_Line( FileStream : TFileStream; ALine : string) : boolean; overload; function Add_Line( FileStream : TFileStream; ALine : string; Enc: TEncoding) : boolean; overload; function Add_Line( FileStream : TFileStream; ALine : string) : boolean; begin Result := Add_Line(FileStream,ALine,TEncoding.ANSI); end; 您甚至可以添加inline关键字,以获得与默认参数产生的完全相同的生成代码,如果它有效. 注意:除了TEncoding.ANSI和TEncoding.UTF8之外,您似乎不支持任何其他内容.在这种情况下,TEncoding参数似乎有点过分,您可以使用UTF8:Boolean参数(或者重新编写代码以使用任意编码的CodePage). 注2:FileStream.WriteBuffer(AStr [1],Length(ALine));因为长度(ALine)和长度(AStr)不必相同,所以你应该使用长度(AStr).另外,当AStr是空字符串时,AStr [1]可能会导致异常,当AStr不为空时,您可以添加一个特殊情况来仅调用WriteBuffer. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |