Cпециализция шаблона метода класса

Есть много инфы про шаблонные классы, но я так и не нашел про шаблонный метод в нешаблонном классе.

Компилятор очень ругается когда я пытаюсь сделать так:

class c
{
public:
    template<class T>
    void method(const T& arg)
    {

    }

    template<>
    void method<int>(const int& arg)
    {

    }
};

как сделать это правельно?


Ответы (2 шт):

Автор решения: Qwertiy

Всё работает: tio.run

#include <iostream>

using namespace std;

class c
{
public:
  template<class T>
  void method(const T& arg)
  {
    cout << "common" << endl;
  }

  template<>
  void method<int>(const int& arg)
  {
    cout << "special" << endl;
  }
};

int main()
{
  c x;

  x.method(.5);
  x.method(1);

  return 0;
}
common
special
→ Ссылка
Автор решения: needKVAS

В случае GCC есть особенность (баг), что специализация не может делаться внутри класса где был объявлен этот метод/класс.

Можно вынести сециализацию наружу

class c
{
public:
  template<class T>
  void method(const T& arg)
  {
  }
};

template<>
void c::method<int>(const int& arg)
{
}
→ Ссылка