刚刚发现了一些有趣的东西
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();
原文链接:https://www.f2er.com/delphi/102028.html