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)
{
}