longint: NewT = word;
longword: NewT = byte;
end;
var
v1: NewT;
Как это можно сделать? Чтобы у меня был разный тип NewT в зависимости от того, каким типом T я специализирую дженерик?
Ты просто тип Т передай И что это за тип можешь смотреть в методе каком нибудь
Мне нужно переменную объявить типа NewT
да никак такое не сделать, NewT = word; так работать не будет ибо чтобы обьявить новый тип нужна декларация type а её абы куда не впихнешь
не знаю как в дельфи, но в FPC можно синоним типа спокойно впихнуть в процедуру, как в примере кода
задача ваще какая?
Ну вот как я и описал
хотя пока писал ответ, подумал что возможно мне это уже не нужно 😁 (но надо подумать)
но не в case блоке же, здесь у тебя просто обьявление типа так как оно и должно быть через type
Ну я просто подумал, что case в record'ах - используется, может и здесь как-то можно...
специализируй двумя типами Т и невТ сразу отдавай в генерик
Да, так можно, но хотелось меньше ручной работы
Кстати... кажется придумал как обойти - нужно ещё одну функцию-генерик обёртку где уже смогу в коде через caseof специализировать дженерик функцию с двумя типами, а эту обёртку заинлайнить и её как будто вообще нет Матрёшка )
после серии таких придумок рождаются монстры говнокода. я люблю такое))
Счас не рядом с ЭВМ, проверю позже, жаль если нет
Это не я А кто тогда? 🤔хммммм👀
это с улицы
Обманщик, ты Алексей! ) Всё заинлайнилось 👌 А то всё си плюс плюююс, си плюс плююююс 😄 А то всё низя, никак, невозможно! - Возможно!
generic function abc<T, TT>(value:T):T; var D: TT; begin Result:=SizeOf(D); end; generic function abc2<T>(value:T):T; inline; begin case sizeof(T) of 4: result:=specialize abc<T,integer>(value); 8: result:=specialize abc<T,UInt64>(value); end; end; procedure TForm1.FormCreate(Sender: TObject); var value:int64; begin Caption:=IntToStr( specialize abc2<int32>(value) );
Обсуждают сегодня