[英]Delphi: Generic type inference of reference argument
克服引用參數的泛型類型推斷的缺點的最佳方法是什么, 這樣我就不必在每次調用中都指定類型 ?
更新 :我不介意其他(包括非通用)解決方案,只要它適用於多種(任何?)類型。
盡管已經有相當長的一段時間了,但這似乎仍未解決。
請在Embarcaderos Quality Central: 問題#78103上對此問題進行投票 。
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記錄。 使用變體我需要使用對象時實現接口,並在變體中存儲對該接口的引用。
類型推斷目前不適用於var和out參數。 我同意這很煩人。
沒有解決方法。 您必須指定類型。
var
MaxG: Real;
...
if Data.FindDataItemValue<Real>(PAR_MaxG, MaxG) and (MaxG = 2.5) then ...
如果您希望Embarcadero解決此問題,請投票給您有關問題的QC條目 。
質量最高的QC條目獲得更多關注。
最好的方法是完全按照您引用的文章中的說明進行操作:在方法調用中包括類型參數:
if Data.FindDataItemValue<Real>(PAR_MaxG, MaxG) ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.