Информация об изменениях

Сообщение Re[13]: Для чего шаблонной функции нужна особая сигнатура? от 25.01.2023 8:22

Изменено 25.01.2023 8:45 vopl

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

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


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

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

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

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


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

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

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

-- добавлено позже
пример нешаблонного стиля для простых случаев
пример шаблонного для сложного значения
пример шаблонного для обобщенного
и прикладник сам может выбирать что ему использовать, просто нешаблонную перегрузку или шаблонную