delphi – 从Generic Container中检索TProc

前端之家收集整理的这篇文章主要介绍了delphi – 从Generic Container中检索TProc前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
刚刚发现了一些有趣的东西
var
  Queue  : TQueue <TProc>;
  MyProc : TProc;
...
MyProc := Queue.Dequeue;

我想你在这里看到了什么意思.但是,编译器认为我想在MyProc中存储Queue.Dequeue方法(键入“对象的过程”)并报告错误

E2010 Incompatible Types: 'TProc' und 'Procedure of object'

我想出的解决方法是这样的

MyProc := TProc (Pointer (Queue.Dequeue));

有更优雅的解决方案吗?

解决方法

关于名称“Dequeue”是指函数本身还是函数的返回值,存在一些语法模糊性.而且由于你正在处理一个匿名方法指针,你可以指定一个正常的函数,它试图将其解释为函数赋值,而不是函数结果赋值.将它转换为指针是错误解决方案,因为这会强制执行函数分配,这会在您尝试调用MyProc时导致各种有趣的错误.

修复它的正确方法是消除语法歧义.在Dequeue之后放置一个空括号,以便编译器确定您正在调用函数而不是简单地通过名称引用它,然后它将起作用.

MyProc := Queue.Dequeue();

猜你在找的Delphi相关文章