Re[13]: Для чего шаблонной функции нужна особая сигнатура?
От: vopl Россия  
Дата: 25.01.23 08:22
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Так это нормально, что редкие в применении особенности мало кто держит в оперативной памяти. Но повторю: пока еще никто здесь не привел примера, в котором обсуждаемая особенность применялась бы иначе, как для спасения изначально неудачного кода. На каком основании ее тут возводят в ранг "каждый обязан знать!"?


Представим себе некий фреймворк, предоставляющий каркас сериализатора (перевод значений в бинарь и обратно). Его пользователем назовем программиста, который в своей прикладухе имеет всякие типы, значения которых ему нужно сериализовать. Вот в таком аспекте можно рассмотреть пример, в котором обсуждаемая особенность применяется для того чтобы "обеспечить свободу и гибкость пользователю фреймворка", а не для "спасения изначально неудачного кода"

https://github.com/vopl/dci-core-stiac/blob/master/include/dci/stiac/serialization/arch.ipp#L54

Упомянутые "свобода и гибкость" реализуются тем что прикладному программисту можно использовать как нешаблонные (в простых случаях) функции save/load, так и шаблонные, если типы сериализуемых значений носят какой нибудь комплексный характер (например как std::vector<E>) или обобщенный (например как обобщенный сериализатор для "такого то семейства перечислений")

-- добавлено позже
пример нешаблонного стиля для простых случаев
пример шаблонного для сложного значения
пример шаблонного для обобщенного
и прикладник сам может выбирать что ему использовать, просто нешаблонную перегрузку или шаблонную
Отредактировано 25.01.2023 9:04 vopl . Предыдущая версия . Еще …
Отредактировано 25.01.2023 8:45 vopl . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.