【发布时间】:2012-09-03 10:34:21
【问题描述】:
我可以将“任何”记录类型传递给我的程序吗?
我多次使用带有字符串的“记录”。
type
TR = record
a: string;
b: string;
end;
要清除它们,我需要写:
Finalize(R);
FillChar(R, SizeOf(R), #0);
问题是我如何通过任何类型的记录来清除它?
为此,我得到了这个提示:“表达式不需要初始化/完成”。
procedure ClearRecord(var R);
begin
Finalize(R);
FillChar(R, SizeOf(R), #0);
end;
感谢您提供的所有信息!
【问题讨论】:
-
我最初没有发现 untyped 参数。你不能用无类型参数做任何通用的事情。 @LURD 的回答对我来说看起来不错。
-
你的过程
ClearRecord得到一个指向一些数据的原始指针,但绝对没有关于它包含什么的信息。应该可以将TypeInfo(R)作为第二个参数传递并从中读取记录布局,但我完全同意 LU RD 的回答,即这太复杂了,不值得付出努力。 -
@hvd 你可以使用
InitializeArray(@R, TypeInfo(TR), 1)来实现这一点,但是是的,普通的旧任务是最好的。 -
我想知道为什么它是必需的。如果我看到代码通常是由运行时自动完成的,我总是有点怀疑。所以我想知道用户有什么“聪明”的伎俩。如果他真的知道自己在做什么,他就不用问了。
-
@DavidHeffernan Delphi 7 没有,所以我猜 Delphi 6 也没有。 (但我不知道,所以谢谢,学习新东西总是很高兴。)
标签: delphi record delphi-6 finalize