Основное правило должно быть:
Используйте Шаблоны , если вы хотите выполнить те же функции / Операции над различными типами данных .
Используйте перегруженные функции , когда вы хотите выполнить различные функции / Операции над различные / одинаковые типы данных
Кроме того, хороший показатель того, когда вам действительно нужна перегруженная функция над шаблоном, - это когда вы делаете слишком много явных специализаций для шаблонной версии функции.
В вашем примере, если вы выполняете одинаковые операции в обеих версиях функций, вы должны использовать шаблоны, иначе вы должны использовать перегруженную функцию.