Кратко отвергните тот факт, что нормальная перегрузка функций будет служить этому примеру лучше. Это подразумевается только как способ узнать о программировании шаблонов. Сказав это, вы можете прокомментировать преимущества/различия, которые вы получите от использования перегрузки функций, по сравнению с специализированной функцией шаблона (хотя это может заслуживать самого себя).
Рассмотрим следующий пример:
template <typename T>
inline void ToString(T value, char* target, size_t max_size );
template <>
inline void ToString<float>(float value, char* target, size_t max_size)
{
snprintf( target , max_size , "%f" , value);
}
template <>
inline void ToString<double>(double value, char* target, size_t max_size)
{
snprintf( target , max_size , "%f" , value);
}
Есть ли способ написать только одну из этих специализаций, которые соответствуют типам float
и double
?
В принципе, я предвижу писать специализацию шаблона для типа шаблона, которая будет соответствовать как float
, так и double
(как тип совпадения типа "float или double" ), но я не уверен, что это вообще возможно С++. Тем не менее, я видел, что перед моими глазами случается неожиданная магия шаблона, поэтому я думаю, что здесь есть хороший вопрос.