【发布时间】:2015-04-08 15:12:30
【问题描述】:
在 XE7 中,我们有新的编译器内部函数 GetTypeKind(尚未记录),它允许我们在编译时提取类型的味道。
如果使用了错误的类型,以下代码将产生运行时错误:
//make sure T is a procedure/function
procedure TDetours<T>.CheckTType;
{$IF CompilerVersion >= 28}
begin
// XE7 and up:Resolve all tests at compiletime.
if (Sizeof(T) <> Sizeof(Pointer)) or (GetTypeKind(T) <> tkProcedure) then begin
raise DetourException.Create('T must be a procedure or function');
end;
{$ELSE}
//Code for pre-XE7 versions
{$ENDIF}
end;
如果没有使用正确的类型类型,我希望编译器生成编译时错误。
这允许在早期阶段捕获任何错误。
这可能吗?
我的思路如下:
- 如果测试为假,则不会生成测试中的代码。
- 如果测试为真,则生成代码。
是否有一些代码可以放入测试中,在生成代码时会使编译器跳闸,但不会使解析器停止工作?
【问题讨论】:
-
可惜不可能,但如果没有错误,至少不会生成代码。
标签: delphi delphi-xe7 type-safety