Накратко отхвърлете факта, че нормалното претоварване на функциите ще служи по-добре на този пример. Това е предназначено само като начин да научите за програмирането на шаблони. Като каза това, добре дошли сте да коментирате ползите/разликите, които ще получите от използването на претоварване на функции, в сравнение със специализацията на шаблони на функции (въпреки че това може да заслужава самостоятелен въпрос).
Разгледайте следния пример:
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"), но не съм сигурен дали това изобщо е възможно с C++. Въпреки това, виждал съм неочаквана шаблонна магия да се случва пред очите ми и преди, така че мисля, че е добър въпрос да задам тук.
template <typename> struct X; template <typename T> struct X<T*>;
Това е частично. - person Kerrek SB   schedule 02.09.2011