解决参考参数的泛型类型推理的缺点的最佳方法是什么,以便我不必在每次调用中指定类型?
更新:我不介意其他(包括非通用)解决方案,只要它适用于多种(任何?)类型。
这似乎仍然没有得到解决,虽然已经有一段时间了。
请在Embarcaderos Quality Central投票决定此问题:Issue #78103。
从comment到Barry Kelly到Generic Methods and Type Inferencing:
PS:你的例子,在Tiburon,几乎可以工作。方法类型推断适用于通过值传递的参数。不幸的是,它不适用于通过引用传递的参数(编译器过于严格)。
现在,差不多三年后,我在Delphi XE中尝试了同样的事情,它抱怨说:
[DCC错误] INIv1_Parser.pas(81):E2033实际和正式var参数的类型必须相同
致电:
function FindDataItemValue<T>(ItemType: TDataItemType; out Value: T): Boolean;
使用:
var MaxG: Real;
...
if Data.FindDataItemValue(PAR_MaxG, MaxG) and (MaxG = 2.5) then ...
通常建议的解决方法:但是,如果我在通话中添加概括,它可以正常工作虽然很烦人甚至需要它。
更新:
到目前为止,我提出的最好的方法是使用Variants或Rtti模块中的TValue记录。使用变体我在需要使用对象时实现接口,并在变体中存储对该接口的引用。
答案 0 :(得分:3)
类型推断当前不适用于var和out参数。我同意这很烦人。
答案 1 :(得分:1)
没有解决方法。您必须指定类型。
var
MaxG: Real;
...
if Data.FindDataItemValue<Real>(PAR_MaxG, MaxG) and (MaxG = 2.5) then ...
如果您希望Embarcadero解决此问题,请投票选择this QC entry that is about your issue。
投票率最高的QC参赛作品受到更多关注。
答案 2 :(得分:0)
最好的方法是完全按照您引用的文章中的内容进行操作:在方法调用中包含类型参数:
if Data.FindDataItemValue<Real>(PAR_MaxG, MaxG) ...