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

delphi – 如何将任意类型的方法传递给过程并识别它?

发布时间:2020-12-15 04:17:38 所属栏目:大数据 来源:网络整理
导读:我有一个线程库,它有三个不同方法类型的构造函数.我希望它们合并为一个逻辑,以便在构造函数中区分它们.可能吗?由于有值等的TValue,方法类型是否有类似的东西? 我现在支持以下类型; TAgThreadMethod1 = procedure of object;TAgThreadMethod2 = procedure;T
我有一个线程库,它有三个不同方法类型的构造函数.我希望它们合并为一个逻辑,以便在构造函数中区分它们.可能吗?由于有值等的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;

作为参考,我不希望用户能够在构造之后的某个时间更改worker方法.因此,如果存在可以在单个构造函数中执行此类操作的解决方案,也欢迎;

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;

解决方法

没有任何好的方法可以做到这一点,因为方法指针的整个点在稍后的某个时候被调用,除非你知道它的签名,否则你不能这样做.因此,失去签名之间的区别是非常适得其反的.

如果你只想在对象中存储一种类型的调用,你可以让三个构造函数分别创建一个带有统一签名的匿名方法,该签名包含对这三种类型的调用,并且只存储它而不必处理多个不同的方法类型.但具体而言,你要求的东西是行不通的.

(编辑:李大同)

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

    推荐文章
      热点阅读