gpt4 book ai didi

delphi - 是否有任何 Delphi 版本可以发出包含 tkUnknown 的 RTTI?

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

只是为了确保我没有忽略一个奇怪的边缘情况,因为我已经发现了一个产生它的情况,但我想确保:

是否有任何 Delphi 版本可以发出 RTTI,其中包含 tkUnknownTTypeKind 的类型?

如果是这样:

  • 有任何文档引用吗?
  • 什么类型会产生它?

在当前的 Delphi XE5 RTL 中,我唯一能找到处理 tkUnknown 的地方是 TValue ,但我没有在 RTL 中找到设置包含 TypeInfoTValue 的代码路径。 tkUnknownKind .

最佳答案

答案是否定的。其他任何事情都会是编译器中的错误。

tkUnknown表示没有可用的类型信息,这可能是不连续的枚举和不从零开始的枚举的情况(如 Barry here 所解释的)以及很久以前的某些类型(如 Real48 )。

它也由 TValue.Kind 返回当TValue.IsEmpty是真的。 (自 XE2 以来,据我所知,在它持有 nil 引用类型的情况下,它也可以返回 True,这是一个错误)。

当您检索不包含类型信息的内容(例如没有类型信息的类型的字段、属性或参数)的 RTTI 时,您的 RTTI 信息不完整。 TRttiField.FieldTypeTRttiProperty.PropertyType在这些情况下返回 nil 以及 TRttiMethod.GetParameters 返回的数组不完整。

虽然可以调用TValue.Make<T>对于没有类型信息的类型,您将无法对此做太多事情,因为它的 TypeInfo 将为零。编译器显然在 E2134 周围工作并将 nil 传递给 TValue.Make 。因此TValue.Kind会说tkUnknown .

关于delphi - 是否有任何 Delphi 版本可以发出包含 tkUnknown 的 RTTI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22112367/

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