簡體   English   中英

Delphi:引用參數的泛型類型推斷

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM