gpt4 book ai didi

delphi - 为什么编译器对我的泛型函数参数提示 "incompatible types"?

转载 作者:行者123 更新时间:2023-12-03 15:17:10 25 4
gpt4 key购买 nike

我在使用泛型时遇到问题。我不知道如何将 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.

我做错了什么?谢谢。

最佳答案

您声明的类型按值接收其参数。

TGenericCallback<T> = procedure(Fields: T); // no const

您传递的函数标有const

procedure OnCallbackWrapper(const Fields: TSpecificFields); // const parameter

因此编译器会拒绝您尝试传递的参数,因为该参数不匹配。你需要让双方匹配。例如:

TGenericCallback<T> = procedure(const Fields: T);

关于delphi - 为什么编译器对我的泛型函数参数提示 "incompatible types"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13974326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com