“TypeIdentifier”的定义在哪里?

3
我需要编写一个函数,以RTTI模式对数据执行操作,但我无法预先知道数据的类型。我尝试编写以下函数:

function doSomething(T: TypeIdentifier): Boolean;

当使用表达式 TypeInfo(T) 时,他期望作为类型参数的是 TypeIdentifiersee the snapshot

但是,当我试图编译时,我收到一个错误,因为无法识别类型 TypeIdentifier。
有人能解释一下我如何在运行时发送数据类型吗?
感谢您的帮助。
Enzo
1个回答

3

TypeInfo是一个使用编译器魔法的内在函数。也就是说,编译器生成实现该函数的代码,而不是它作为运行时库的一部分。

你无法访问这样的魔法。你不能创建一个像TypeInfo那样接受类型标识符的函数。所以你需要使你的函数接受TypeInfo返回的指向类型信息的指针PTypeInfo

你可以像这样调用你的函数:

DoSomething(TypeInfo(SomeTypeIdentifier));

现在从技术上讲,您可能会注意到TypeInfo返回类型为Pointer的值。这是因为PTypeInfo在另一个单元TypInfo中定义,而所有内部函数都定义在System单元中,不允许使用TypInfo。但是如上面链接的文档所述,TypeInfo返回指向TTypeInfo的指针。

谢谢,David。我会采纳你的建议... :-) - Enzo Costantini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接