La conversión de D2007 a XE2, que convierten esta función¿Cómo establecer el valor predeterminado para un parámetro de función de tipo TEncoding?
function Add_Line(FileStream : TFileStream; ALine : string) : boolean;
a
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;
Justificación:
Cambiar código usando Add_Line lo menos posible
Aceptar el cambio automático a Unic ode, solo en el último momento escriba archivos de texto de 8 bits (esto se usa en XML y CSV). En el futuro, podríamos movernos a los archivos UTF-16 si lo deseamos.
me hubiera gustado para definir algo como:
function Add_Line(FileStream : TFileStream; ALine : string; Enc: TEncoding = TEncoding.ANSI) : boolean;
pero el compilador se queja ;-)
¿Es posible algo así?
La restricción de los parámetros predeterminados para ser valores constantes es una de las razones por las que siempre estoy a favor de usar sobrecargas. –
Las sobrecargas nunca pasaron por mi mente ;-) –