Относительно этой функции в Delphi:
function TAudioFileMetadata.LoadTags(const Filename: String; var LastError: Integer; var DetectedFormat: TAudioFormat): Boolean;
type
TLoadFromFunction = function (const Filename: String; var LastError: Integer): Boolean of object;
TLoadFrom = record
Format: TAudioFormat;
Process: TLoadFromFunction;
end;
var
i: Byte;
LoadOrder: array [1..6] of TLoadFrom;
begin
DetectedFormat := afUnknown;
LoadOrder[1].Format := afMp3;
LoadOrder[1].Process := LoadFromMp3;
//...
LoadOrder[6].Format := afApe;
LoadOrder[6].Process := LoadFromApe;
for i := Low(LoadOrder) to High(LoadOrder) do
begin
Result := LoadOrder[i].Process(Filename, LastError);
if Result then
begin
DetectedFormat := LoadOrder[i].Format;
break;
end;
end;
end;
Как я могу улучшить свою реализацию? Могу ли я создать / заполнить массив LoadOrder
за один раз (или, по крайней мере, не использовать 2 строки на TLoadFrom
)? Можно ли использовать массив const
(я так не думаю)?