加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 为什么编译器会为我的泛型函数参数抱怨“不兼容的类型

发布时间:2020-12-15 09:42:07 所属栏目:大数据 来源:网络整理
导读:我在使用泛型方面遇到了问题.我不知道如何将OnCallbackWrapper传递给CallbackWrapper程序.我在以下示例中遇到“不兼容类型”错误: unit uTest;interfaceuses Generics.Defaults;type TGenericCallbackT = procedure(Fields: T);type TSpecificFields = reco
我在使用泛型方面遇到了问题.我不知道如何将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.

我究竟做错了什么?谢谢.

解决方法

procedure OnCallbackWrapper( Fields: TSpecificFields);
begin
  Assert(Fields.A = 5);
  Assert(Fields.B = 4);
  Assert(Fields.C = 3);
end;

或将声明改为

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

按值传递参数的过程不与通过引用传递参数的过程分配兼容. Reference

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读