任何人都可以解釋爲什麼下面的代碼失敗?匿名方法投射爲指針
type TIDEThemeObserverFunc = reference to procedure(foo: integer);
var fObserverFuncs: TList<TIDEThemeObserverFunc>
function RegisterEventObserver(aObserverFunc: TIDEThemeObserverFunc): Pointer;
begin
fObserverFuncs.Add(aObserverFunc);
Result := @aObserverFunc;
// line below somehow fails
assert(fObserverFuncs.IndexOf(TIDEThemeObserverFunc(Result)) <> -1);
end;
我認爲匿名方法可以簡單地通過指針流傳和使用,但這似乎是一個錯誤的假設。另外,任何解釋如何在匿名方法下實現匿名方法的資源都會很好。 TIA。
該列表的引用計數應該工作,因爲它的類型是'TList <(某種方法引用類型)>'。如果引用計數與泛型相沖突,甚至像TList這樣的微小案例也將毫無用處。 –
2010-02-22 17:12:17
@Barry凱利:謝謝,我從帖子中刪除了我的疑惑。 – kludg 2010-02-22 17:58:17