gpt4 book ai didi

delphi - 如何在类构造函数中访问 RTTI?

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

不允许使用此代码:

class constructor TOmniMultiPipelineStage.Create;
var
RTTIType: TRttiType;
begin
RTTIType:= TRttiContext.GetType(self);
end;

[dcc32 Error] OtlParallel.pas(5040): E2003 Undeclared identifier: 'self'

该变体也是不允许的:

class constructor TOmniMultiPipelineStage.Create;
var
RTTIType: TRttiType;
begin
//Not really what I want because I want the actual type of the class
//Not a fixed ancestor type
RTTIType:= TRttiContext.GetType(TOmniMultiPipelineStage);
end;

[dcc32 Error] OtlParallel.pas(5039): E2076 This form of method call only allowed for class methods or constructor

如何在类构造函数中获取类的 RTTI 信息?

self 注意:循环遍历类的所有后代:Delphi: At runtime find classes that descend from a given base class?

最佳答案

使用ClassInfo TObject 的类方法:

class constructor TMyClass.ClassCreate;
var
ctx: TRttiContext;
typ: TRttiType;
begin
typ := ctx.GetType(ClassInfo);
end;

请注意,我还修复了对 GetType 的调用语法,它是一个实例方法,因此必须在 TRttiContext 的实例上调用。

对您来说更大的问题是类构造函数对您没有用处。类构造函数是静态的。对于定义它们的类型,它们仅执行一次。正如您所明确期望的那样,它们不会在派生类的上下文中执行。

对于类变量也是如此,您可以在评论中讨论。类变量只有一个实例。您期待并希望每个派生类都会有新的实例。

因此,虽然 ClassInfo 回答了您提出的问题,但它对您没有任何实际用处。

关于delphi - 如何在类构造函数中访问 RTTI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24785506/

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