Есть функция, реализация которой не отличается при любых типах данных. Но тип данных не может быть абсолютно любым ( всего возможных типов данных которые обработает функция - 9 ).
Вопрос: стоит ли делать шаблон для такой функции, а внутри просто проверять является ли тип данных "правильным", или лучше сделать всё обычной перегрузкой?
Вообще, один из плюсов (не главный, конечно) шаблонов - уменьшение дублирования кода. А так придется писать 9 почти одинаковых (за исключением типов) функций. Дублирование кода! (Или Вы не ленивый программист?) Используйте std::enable_if_t и отсекайте ненужные типы, для этого этот механизм и был введен в стандарт. Учитывая комментарий про типы, которые преобразуются в std::string, можете попробовать использовать std::is_convertible. Хотя стоит учесть специфику Вашей задачи, возможно, это недостаточное условие. Вот пример использования std::is_convertible с сайта:
#include <iostream>
#include <type_traits>
struct A { };
struct B : A { };
int main()
{
std::cout << std::boolalpha;
std::cout << "is_convertible:" << std::endl;
std::cout << "int => float: " << std::is_convertible<int,float>::value << std::endl;
std::cout << "int = >const int: " << std::is_convertible<int,const int>::value << std::endl;
std::cout << "A => B: " << std::is_convertible<A,B>::value << std::endl;
std::cout << "B => A: " << std::is_convertible<B,A>::value << std::endl;
return 0;
}
Про идиому SFINAE можно почитать тут. Варианты использования std::enable_if есть тут.
Если проверка типа при помощи std::is_convertible не подходит для данной задачи, то можно сделать проверки типа на основе std::is_integral, std::is_floating_point и прочих подобных структур. Прочитать про них можно, например, здесь. Полагаю, в задаче может быть обработано более 9 типов, учитывая всякие квалификаторы, типы int с размером, разные типы char и т.д. В таком случае, использование std::is_integral и компании оптимально, поскольку они успешно обрабатывают все подобные ситуации.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости