Delphi-我可以编写自己compile-time functions
的const和var声明,在编译时执行。
标准的Delphi库包含常用于初始化的例程,例如Ord(),Chr(),Trunc(),Round(),High()等。
我可以编写自己的代码以在编译时执行例程并将结果用作常量吗?
您不能编写自己的内部函数。因为那需要编译器魔术。
但是,可能还有其他选择可以实现您的目标。
预处理器
唯一的方法是使用预处理器。
有几个:http : //wiki.delphi-jedi.org/wiki/JEDI_Pre_Processor
Delphi预处理器http://sourceforge.net/p/dpp32/wiki/Home/history
Andreas Hausladen刚刚在这方面公开了自己的作品。
它实际上不是预处理器,而是语言扩展器。
https://github.com/ahausladen/DLangExtensions
预处理程序的问题在于,它会杀死原始(预处理之前)源代码与Delphi编译的源代码之间的链接。
这意味着您将没有原始源的调试信息。
(除非您重写了地图文件)。
内联
根据您要执行的操作,可以使用内联来实现与内部函数几乎相同的效率。参见:https : //stackoverflow.com/a/6401833/650492
使用内在函数构造语句
如果您有一个包含内在函数的代码块,则将在编译时评估完整结果,从而使总构造像内在函数一样工作。
请注意以下(愚蠢的)示例:
function FitsInRegister<T>: Boolean; inline;
begin
if GetTypeKind(T) in [tkString, tkUString] then result:= false
else
{$IFDEF CPU32BITS}
Result:= SizeOf(T) <= 4;
{$ELSEIF CPU64BITS}
Result:= SizeOf(T) <= 8;
{$ENDIF}
end;
因为它是内联的,并且仅使用内部函数(和编译器指令),所以该函数将在编译时解析为常量,而不生成任何代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句