Наследование шаблонов

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Re: Наследование шаблонов

Сообщение Дож » 21.03.2014 17:48:06

Я про чисто алгоритмический аспект. Понятно - что внутренне - это всё 1 или 0. Но для человека понятнее - если видишь nil в присвоении - понимаешь, что тут явно Pointer или его производные. А если 0 - то это число (перечисляемое значение).


Чисто алгоритмически в данной ситуации мы не находим данные по заданному ключу и хотим вернуть какое-то его дефолтное значение (что-то вернуть-то нужно).

Лучше было бы, конечно, передавать это дефолтное значение в самой функции
Код: Выделить всё
function MyGetValue(key:TKey; def: TValue = Default(TValue)):TValue;inline;
...
           result := def;
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Наследование шаблонов

Сообщение Mirage » 21.03.2014 18:38:09

Еще не помешает учесть, что далеко не везде 0 и nil это одно и тоже. Указатель по нулевому адресу может быть вполне валидным и для nil придется поискать другое числовое значение.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Наследование шаблонов

Сообщение zub » 21.03.2014 18:55:55

alexs
>>Я про чисто алгоритмический аспект. Понятно - что внутренне - это всё 1 или 0. Но для человека понятнее - если видишь nil в присвоении - понимаешь, что тут явно Pointer или его производные. А если 0 - то это число (перечисляемое значение).
Снаружи оно и выглядит как NIL, это внутренняя "проблема" генерика. Для меня возможность в пару строк получить типобезопасный контейнер важнее.

Дож
Как понадобится возможность получать различные значения в случае отсутствия ключа - так и зделаю, но пока хватает нуля, имхо лишний параметр вводить нестоит, накрайняк можно объявить классовую константу.
Кстати NIL и 0 в качестве default`а гарантируется? или это может меняться в зависимости от реализации\целевой платформы? Наврятли конечно, но вдруг?
Default особенно хорош (вернее без него никак) в случае когда в роли TValue выступает какойнибудь record
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Наследование шаблонов

Сообщение Дож » 21.03.2014 19:47:31

Кстати NIL и 0 в качестве default`а гарантируется? или это может меняться в зависимости от реализации\целевой платформы? Наврятли конечно, но вдруг?


По идее, да, он должен возвращать 0, nil, пустые строки, множества и массивы.

Без него можно через FillChar, но это кажется очень некрасивым.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Наследование шаблонов

Сообщение hinst » 21.03.2014 20:07:00

ещё совсем недавно наследование шаблонов не работало. Когда успели починить? в 2.7.1 trunc что ли
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Наследование шаблонов

Сообщение zub » 21.03.2014 21:48:28

Да, в транке работает
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Наследование шаблонов

Сообщение alexs » 21.03.2014 23:46:58

zub
На мой взгляд, вот такое неаккуратное использование типов - первый шаг к получению скрытых ошибок и дырок.
Зачем себе создавать проблемы?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Наследование шаблонов

Сообщение zub » 22.03.2014 09:13:09

Я проблем тут не вижу, единственное - экзотика когда nil<>0, но в этом случае можно искать через итератор, без данной обертки.
Более того, при обычных подходах использования и преведения типов еще более чудесны и опасны.
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Пред.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru