Специализация шаблонной функции членства шаблонного класса?

У меня есть шаблонный класс, который имеет шаблонную функцию членства, которая должна быть специализирована, как в:

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 жаловаться.

Что правильный путь состоит в том, чтобы сделать это?

5
задан uj2 14 June 2010 в 19:19
поделиться

1 ответ

Очень распространенная проблема. Один из способов решить эту проблему - перегрузить

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>) { }
};
8
ответ дан 14 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: