169 похожих чатов

Generic procedure function test<T>(param: T); type case T of

longint: NewT = word;
longword: NewT = byte;
end;
var
v1: NewT;

Как это можно сделать? Чтобы у меня был разный тип NewT в зависимости от того, каким типом T я специализирую дженерик?

21 ответов

43 просмотра

Ты просто тип Т передай И что это за тип можешь смотреть в методе каком нибудь

notme- Автор вопроса
Alex Wow
Ты просто тип Т передай И что это за тип можешь с...

Мне нужно переменную объявить типа NewT

да никак такое не сделать, NewT = word; так работать не будет ибо чтобы обьявить новый тип нужна декларация type а её абы куда не впихнешь

notme- Автор вопроса
Александр (Rouse_) Багель
да никак такое не сделать, NewT = word; так работа...

не знаю как в дельфи, но в FPC можно синоним типа спокойно впихнуть в процедуру, как в примере кода

notme- Автор вопроса
notme- Автор вопроса
notme
Ну вот как я и описал

хотя пока писал ответ, подумал что возможно мне это уже не нужно 😁 (но надо подумать)

notme
screenshot Delphi тоже умеет

но не в case блоке же, здесь у тебя просто обьявление типа так как оно и должно быть через type

notme- Автор вопроса
Александр (Rouse_) Багель
но не в case блоке же, здесь у тебя просто обьявле...

Ну я просто подумал, что case в record'ах - используется, может и здесь как-то можно...

специализируй двумя типами Т и невТ сразу отдавай в генерик

notme- Автор вопроса
zamtmn
специализируй двумя типами Т и невТ сразу отдавай ...

Да, так можно, но хотелось меньше ручной работы

notme- Автор вопроса
zamtmn
специализируй двумя типами Т и невТ сразу отдавай ...

Кстати... кажется придумал как обойти - нужно ещё одну функцию-генерик обёртку где уже смогу в коде через caseof специализировать дженерик функцию с двумя типами, а эту обёртку заинлайнить и её как будто вообще нет Матрёшка )

notme
Кстати... кажется придумал как обойти - нужно ещё ...

после серии таких придумок рождаются монстры говнокода. я люблю такое))

notme- Автор вопроса
Alexey Kulakov
незаинлайнится

Счас не рядом с ЭВМ, проверю позже, жаль если нет

notme- Автор вопроса

Это не я А кто тогда? 🤔хммммм👀

notme- Автор вопроса
Alexey Kulakov
незаинлайнится

Обманщик, ты Алексей! ) Всё заинлайнилось 👌 А то всё си плюс плюююс, си плюс плююююс 😄 А то всё низя, никак, невозможно! - Возможно!

notme- Автор вопроса
notme
Обманщик, ты Алексей! ) Всё заинлайнилось 👌 А то в...

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) );

Похожие вопросы

Обсуждают сегодня

$params = [ 'formid' => 'feedbackForm', 'formTpl' => '@CODE: <form class="form-validate" data-id="ajax_form"> <fieldset class="margin-bottom-md"> ...
Pathologic
1
И ещё вопрос: можно ли типа как на дос как-то запариться и с помощью прерываний выводить текст, вместо функции printf ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
34
Ладно, ещё тупого спрошу. Код должен банально вывести значение регистра на консоль, на деле же не выводя ничего, просто оставляя нерабочую консоль (открыта, ничего не написан...
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
25
здравствуйте. пытаюсь проверить, содержится ли в десятичном представлении инта некоторая цифра. совершаю: strstr(x, "5") != NULL) получаю ошибку с фото (заведомо неработающий ...
Катя Шевчук🪇
18
Что там вообще с кроссплатформенностью?
🄼🄰🄺🅉🄰🄸
23
Доброй ночи. Вопрос знатокам. Имеется некая таблица, результат которой выведен в DBGrid на форме. И есть форма, с помощью которой можно как добавить запись, так и отредактиров...
Евгений
28
Ребята. Этот вопрос мучает меня уже 13 - 15 лет. Почему при валидации в ФормЛистере у поля phone поведение странноватое и отличается от других? А именно, вот набор правил д...
Андрей [aharito] Харитонов
1
{ char buff = *start; *start = *end; *end = buff; } Из-за этой строчки? Что каждый символ через перем бафф? Как вариант использовать другие со...
Wenks
12
а всё почему? потому что ассемблер в отличии от яву порождает множество пагубных привычек, среди которых например можно отметить использование глобальных переменных для всего ...
Mixail Frolov
35
Кстати, а я вот тут подумал. Допустим, у нас имеется цикл который выполняет огромное количество итераций, но мы хотим, чтобы какие-то действия исполнилось только один раз. В Я...
The Bird of Hermes
23
Карта сайта