У меня есть шаблонный класс, который имеет шаблонную функцию членства, которая должна быть специализирована, как в:
template <typename T>
class X
{
public:
template <typename U>
void Y() {}
template <>
void Y<int>() {}
};
Altough VC обрабатывает это правильно, по-видимому, это не стандартно, и GCC жалуется: explicit specialization in non-namespace scope 'class X<T>'
Я попробовал:
template <typename T>
class X
{
public:
template <typename U>
void Y() {}
};
template <typename T>
// Also tried `template<>` here
void X<T>::Y<int>() {}
Но это заставляет и VC и GCC жаловаться.
Что правильный путь состоит в том, чтобы сделать это?
Очень распространенная проблема. Один из способов решить эту проблему - перегрузить
template <typename T>
struct type2type { typedef T type; };
template <typename T>
class X
{
public:
template <typename U>
void Y() { Y(type2type<U>()); }
private:
template<typename U>
void Y(type2type<U>) { }
void Y(type2type<int>) { }
};