gpt4 book ai didi

delphi - 如何获取泛型类方法的方法地址?

转载 作者:行者123 更新时间:2023-12-03 15:42:51 31 4
gpt4 key购买 nike

我们可以通过以下代码获取类方法地址:

type
TMyClass = class
procedure A;
end;

var P: Pointer;
begin
P := @TMyClass.A;
end;

对于泛型类,如何获取泛型类的方法地址?

type
TGeneric<T> = class
procedure A;
end;


var P: Pointer;
begin
P := @TGeneric<T>.A; // <--- compilation error
end.

最佳答案

TGeneric<T>是开放类型,换句话说,并未指定所有类型参数。您的代码失败,因为开放类型的方法没有单一地址。不同的具体实例有不同的地址。例如TGeneric<Integer>.ATGeneric<string>.A 是不同的方法,因此具有不同的地址。

除非您为泛型类型参数提供具体值,否则此构造没有任何意义。考虑这个程序:

{$APPTYPE CONSOLE}

type
TGeneric<T> = class
class procedure A;
end;

class procedure TGeneric<T>.A;
var
P: Pointer;
begin
P := @TGeneric<T>.A;
Writeln(NativeInt(P));
end;

begin
TGeneric<Integer>.A;
TGeneric<string>.A;
end.

该程序输出两个不同的值。

关于delphi - 如何获取泛型类方法的方法地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56016378/

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