我有一個線程庫有三個不同的方法類型的構造函數。我希望它們被合併爲一種邏輯,並在構造函數中將它們區分開來。可能嗎?由於值爲TValue
,那麼對於方法類型是否有類似的情況?如何將任意類型的方法傳遞給過程並識別它?
我現在支持以下幾種類型;
TAgThreadMethod1 = procedure of object;
TAgThreadMethod2 = procedure;
TAgThreadMethod3 = procedure(const AThread: TAgThread) of object;
和構造函數,像這樣:
constructor Create(const AOnRun: TAgThreadMethod1); overload; virtual;
constructor Create(const AOnRun: TAgThreadMethod2); overload; virtual;
constructor Create(const AOnRun: TAgThreadMethod3); overload; virtual;
僅供參考,我不希望用戶有在施工後都改變的輔助方法在以後的時間的能力。所以如果有一個解決方案可以在一個構造函數中做這樣的事情,也是值得歡迎的;
constructor Create
(const AOnRun: [Some type which can hold arbitrary method types]);
begin
// code to identify the method contained in AOnRun.
// if supported, assign it the correct handler.
end;
好吧,我想我明白你的意思了。雖然,有沒有辦法通過rtti來識別方法指針的類型呢?我試圖容納多種類型的方法,所以我不必爲這些方法創建多個構造函數。 –
@Umair:不,沒有辦法通過RTTI來識別方法指針。在內部,它只是一個指針。因爲每個對象都有一個引用其VMT的隱藏字段,並且VMT有一個指向RTTI表的指針,但是方法指針沒有類似的東西讓你在運行時做出這個決定。 –
@Umair:另外,我不確切知道你在做什麼,但是當你說「線程庫需要多種方法指針類型」時,我想到的第一件事就是「我已經在[OmniThreadLibrary](http://otl.17slon.com/)中看到了一些非常相似的東西。「你看過嗎? –