我遇到了仿制药的问题。我不知道如何将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
我可以与此相关。如果可以的话,那会很好。请注意,我狡猾地期待着漫长的讨论。只是一些帮助人们理解你的答案的提示(这很有用)。例如,以这个答案为例,没有解释强迫人们寻找差异。你做的编辑确实有帮助!另外:不要害怕犯英文错误。很多人愿意并能够编辑你的答案,使英语更好。 –