Вы не можете сделать специализацию функции шаблона.Но вы можете делегировать реализацию в вспомогательный класс, который можно использовать из вашей функции.Немного скелетного кода:
Реализация шаблона шаблона и его специализация:
template< typename T, bool isArithmetic>
struct Something { void operator()() { ... } };
template< typename T, true>
struct Something { void operator()() { ... do something specialized for arithmetic types; } }
Затем используйте его в функции шаблона:
template< typename T>
void myFunction()
{
Something<T, IsArithmetic<T>::value>()();
}
Где IsArithmetic - это класспредоставляет информацию о типе T (селектор).Вы можете найти такую информацию о типах в библиотеках boost, например.