Я могу использовать операторы класса для строк, используя промежуточную запись холдинга.
Так что я могу так скрывать преобразование встроенных типов.Есть ли способ обхода работы операторов класса для встроенных типов
program TestNewStringHelper;
{$APPTYPE CONSOLE}
uses
System.SysUtils;
type
TStringRecord = record
private
Data: string;
public
class operator Implicit(const a: TStringRecord): Integer; inline;
class operator Implicit(const a: string): TStringRecord; inline;
end;
{ TStringRecord }
class operator TStringRecord.Implicit(const a: string): TStringRecord;
begin
pointer(Result.Data):= pointer(a);
end;
class operator TStringRecord.Implicit(const a: TStringRecord): Integer;
begin
Result:= StrToInt(a.Data);
end;
var
input: TStringRecord;
output: integer;
begin
input:= '42';
output:= input;
WriteLn(IntToStr(output));
ReadLn;
end.
Я хотел бы сделать что-то вроде вместо:
var
input: string;
output: integer;
begin
input:= '42';
output:= input; //Class operator magic
WriteLn(IntToStr(output));
ReadLn;
end.
Согласно интерактивной справке:
Примечание: Класс и записи помощники не поддерживают перегрузку операторов.
и http://qc.embarcadero.com/wc/qcmain.aspx?d=72253
Есть обходной путь для достижения неявного преобразования встроенных типов без использования типа посредника?
Вы хотите превратить строго типизированный Delphi в какой-то сумасшедший язык сценариев? :) –
'MyDateTime: = 'Двадцать прошлых полдень''; – Johan
Это звучит как действительно плохая идея ... попытка сделать какой-либо язык более похож на VB6, просто кажется неправильным. –