Каков лучший способ обойти недостаток вывода обобщенных типов ссылочных аргументов, , чтобы мне не приходилось указывать тип при каждом вызове ?
Обновление : Я не против других (в том числе неуниверсальных) решений, если они работают с несколькими (любыми?) Типами.
Это, похоже, до сих пор не решено, хотя известно довольно давно.
Пожалуйста, проголосуйте за решение этой проблемы на Embarcaderos Quality Central: Выпуск # 78103 .
Из комментария Барри Келли до Универсальные методы и определение типов :
PS: Ваш пример в Тибуроне почти работает. Вывод типа метода хорошо работает для аргументов, передаваемых по значению. К сожалению, он не работает для аргументов, передаваемых по ссылке (компилятор слишком строг).
Теперь, почти три года спустя, я пытаюсь сделать то же самое в 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 или запись TValue из модуля Rtti. Используя варианты, я реализую интерфейсы, когда мне нужно использовать объекты, и сохраняю ссылку на них (интерфейс) в варианте.