gpt4 book ai didi

delphi - 如何为 TEncoding 类型的函数参数设置默认值?

转载 作者:行者123 更新时间:2023-12-03 14:56:05 25 4
gpt4 key购买 nike

从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 更改代码

  • 接受自动更改为 Unicode,仅在最后一刻写入 8 位文本文件(这在 XML 和 CSV 中使用)。如果需要的话,将来我们仍然可以转向 UTF-16 文件。

我想定义类似的东西:

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.ANSITEncoding.UTF8 之外,您似乎不支持任何其他内容。在这种情况下,TEncoding 参数似乎太过分了,您可以使用 UTF8: B​​oolean 参数代替(或者重新编写代码以使用任意编码的 CodePage).

注释 2:FileStream.WriteBuffer( AStr[1], Length(ALine) ); 是错误的,因为 Length(ALine)Length(AStr) 不必相同,您应该使用 Length(AStr) 代替。此外,当 AStr 为空字符串时,AStr[1] 可能会导致异常,您可以添加一种特殊情况,仅在以下情况下调用 WriteBuffer: AStr 不为空。

关于delphi - 如何为 TEncoding 类型的函数参数设置默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12352152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com