delphi – 未记录的内在例程
Delphi有这个列表:
Delphi Intrinsic Routines
但是这个列表是不完整的. 哪些无证的内在功能存在,因为他们的目的何时何地? 解决方法
我知道以下无证件的内在功能.
德尔福2007:here和Hallvard’s blog: 默认 function Default(T: Typeidentifier): value of T; 返回类型标识符T的零表示. 下面介绍了XE7中介绍的内在的in the XE7 beta blog和Stefan Glienke IsManagedType function IsManagedType(T: TypeIdentifier): Boolean; 如果T是接口,字符串或动态数组,或包含此类记录的记录,则为真.包含托管类型的类将返回false. HasWeakRef function HasWeakRef(T: TypeIdentifier): Boolean; 不确定它是做什么的,它只能在NextGen编译器中有用. GetTypeKind function GetTypeKind(T: TypeIdentifier): TTypeKind; 与PTypeInfo(System.TypeInfo(T))^.类似,但是因为它是一个编译器,内在的函数在compiletime中解析,并且评估为false的条件代码将被编译器剥离. IsConstValue function IsConstValue(const Value): Boolean; 如果Value是常数,则为True,否则为false. 所属类别 function TypeInfo(T: typeindentifier): PTypeInfo; 这个函数不是没有这样的文档,但是没有证明的是XE7是一个内在函数. 退货地址 在returnaddress构造中使用以下引发异常. function ReturnAddress(Expression): pointer; //Delphi ? function AddressOfReturnAddress(Expression): pointer; //Delphi ? 据我所知,你不能直接从用户代码中调用它们. IsConstValue的示例 type TFlavor = (Tasty,Nasty); TIntegerHelper = record helper for integer function GetSomething(Flavor: TFlavor): TPoint; inline; private function GetTastyPoint: TPoint; function GetNastyPoint: TPoint; end; function TIntegerHelper.GetSomething(Flavor: TFlavor): TPoint; begin if IsConstValue(Flavor) then begin if Flavor = Tasty then Result:= Self.GetTastyPoint else Result:= Self.GetNastyPoint; end else begin Assert(1=0,'This function can only be called with constant parameters'); end; end; procedure Test; var pt: TPoint; begin pt:= 100000.GetSomething(Tasty); 该调用将被转换为GetTastyPoint,并且if / then序列将被链接器消除. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |