Здравствуйте, Caracrist, Вы писали:
C>нужно на выходе получить -1 для double и значение по умолчанию для всех остальных. При этом используется не сам тип double в сигнатуре функций, а локальный typedef, который по воле случая к нему приводится.
C>Этот частный случай можно обойти. Вопрос как вообще это правильно делается?
C>Речь идёт о том когда для некоторых шаблонных функций нужна спецяльная реализация, и для остальных общая, но при этом типы заданы через typedef.
Частичных специализаций функций вроде как нет в языке. Попробуйте использовать частичную специализацию классов:
template<typename T> struct xxx;
template<typename U>
struct xxx<S<U>>
{
static void foo(U &t)
{
t = U();
}
};
template<>
struct xxx<S<double>>
{
static void foo(double &t)
{
t = -1;
}
};
template<typename T>
void S<T>::foo(typename S<T>::resultT &t)
{
xxx<S<T>>::foo(t);
}