我遇到了仿製藥的問題。我不知道如何將OnCallbackWrapper
傳遞給CallbackWrapper
程序。我收到以下例子「不兼容的類型」錯誤:爲什麼編譯器會爲我的泛型函數參數抱怨「不兼容的類型」?
unit uTest;
interface
uses
Generics.Defaults;
type
TGenericCallback<T> = procedure(Fields: T);
type
TSpecificFields = record
A: Integer;
B: Integer;
C: Integer;
end;
const
SpecificFields: TSpecificFields =
(A: 5; B: 4; C: 3);
procedure CallbackWrapper(GenericCallback: TGenericCallback<TSpecificFields>);
implementation
procedure CallbackWrapper(GenericCallback: TGenericCallback<TSpecificFields>);
begin
GenericCallback(SpecificFields);
end;
procedure OnCallbackWrapper(const Fields: TSpecificFields);
begin
Assert(Fields.A = 5);
Assert(Fields.B = 4);
Assert(Fields.C = 3);
end;
procedure Dummy;
begin
CallbackWrapper(OnCallbackWrapper); //Incompatible types here
end;
end.
我在做什麼錯?謝謝。由值
如果它解釋了爲什麼需要進行這些更改,我會投這個票。順便說一句,我明白用英語寫解釋可能對你並不容易,但我更喜歡任何解釋,不管英語多麼糟糕,完全沒有解釋。並且:你練習的越多,得到的就越好:-) –
除了我的英語問題 ,我覺得這是膨脹的明顯的事情要詳細解釋。 這是一個相當默默無聞的人的個人問題。我會盡量適應,但它不適合我的個性。 – bummi
我可以與此相關。如果可以的話,那會很好。請注意,我狡猾地期待着漫長的討論。只是一些幫助人們理解你的答案的提示(這很有用)。例如,以這個答案爲例,沒有解釋強迫人們尋找差異。你做的編輯確實有幫助!另外:不要害怕犯英文錯誤。很多人願意並能夠編輯你的答案,使英語更好。 –