Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.84] |
|
Сообщ.
#1
,
|
|
|
Есть такой код:
{$APPTYPE CONSOLE} type TFuncs<R> = record public type Method = function: R of object; WithObj<T: class> = record public type Regular = function(Obj: T): R; end; end; TIntFuncWithObj = TFuncs<Integer>.WithObj<TObject>.Regular; //function(Obj: TObject): Integer; TIntMethod = TFuncs<Integer>.Method; //function: Integer of object; TObj = class N: Integer; Func: TIntFuncWithObj; function Get: Integer; procedure Setup; end; function TObj.Get: Integer; begin Result := N; end; function GetMethodCodePtr(ObjProc: TIntMethod): Pointer; overload; begin Result := TMethod(ObjProc).Code; end; procedure TObj.Setup; begin Func := GetMethodCodePtr(Get); end; var Obj: TObj; begin Obj := TObj.Create; Obj.N := 12345; Obj.Setup; WriteLn(Obj.Func(Obj)); end. Но! Стоит убрать слово overload или заменить TIntMethod = TFuncs<Integer>.Method; на TIntMethod = function: Integer of object; тогда всё компилится нормально. WTF?! |
Сообщ.
#2
,
|
|
|
Блин, что-то я тут натворил с заменой и всё поломал. Вместо имени – Integer.
Исправлю, напишу... Добавлено Поправил |