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

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

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

Аватара пользователя
Дож
энтузиаст
Сообщения: 900
Зарегистрирован: 12.10.2008 16:14:47

Сообщение Дож »

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


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

Лучше было бы, конечно, передавать это дефолтное значение в самой функции

Код: Выделить всё

function MyGetValue(key:TKey; def: TValue = Default(TValue)):TValue;inline;
...
           result := def;
Mirage
энтузиаст
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia
Контактная информация:

Сообщение Mirage »

Еще не помешает учесть, что далеко не везде 0 и nil это одно и тоже. Указатель по нулевому адресу может быть вполне валидным и для nil придется поискать другое числовое значение.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

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

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

Сообщение Дож »

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


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

Без него можно через FillChar, но это кажется очень некрасивым.
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Сообщение hinst »

ещё совсем недавно наследование шаблонов не работало. Когда успели починить? в 2.7.1 trunc что ли
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Да, в транке работает
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

zub
На мой взгляд, вот такое неаккуратное использование типов - первый шаг к получению скрытых ошибок и дырок.
Зачем себе создавать проблемы?
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Я проблем тут не вижу, единственное - экзотика когда nil<>0, но в этом случае можно искать через итератор, без данной обертки.
Более того, при обычных подходах использования и преведения типов еще более чудесны и опасны.
Ответить