Y.N*_*Y.N 5 delphi compile-time
Delphi - 我可以编写自己compile-time functions
的const和var声明,在编译时可执行.
标准Delphi lib包含用于常量初始化的例程,如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;
Run Code Online (Sandbox Code Playgroud)
因为它是内联的并且它只使用内部函数(和编译器指令),所以该函数将在编译时解析为常量而不生成任何代码.
归档时间: |
|
查看次数: |
761 次 |
最近记录: |