gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:06:46 24 4
gpt4 key购买 nike

我有一个线程库,它具有用于三种不同方法类型的三个构造函数。我希望将它们合并为一个和某种逻辑,以在构造函数中区分它们。是否可以?既然值有 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;

仅供引用,我根本不希望用户在构建后有能力在稍后的时间更改工作方法。因此,如果存在可以在单个构造函数中执行类似操作的解决方案,也是受欢迎的;

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;

最佳答案

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

如果您只想在对象内存储一种类型的调用,则可以使三个构造函数各自创建一个具有统一签名的匿名方法,该签名包装对三种类型的调用,并且只需存储该调用即可,而不必处理多种不同的方法类型。但具体而言,您所要求的内容是行不通的。

关于delphi - 如何将任意类型的方法传递到过程中并识别它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22700080/

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