Синтаксис функции-члена в специализации шаблона класса

У меня есть шаблон класса, давайте назовем его A, который имеет функцию-член abc():

template <typename T>
class A{
public:
T value;
void abc();
};

Я могу реализовать функцию-член abc() вне объявления класса, используя следующий синтаксис:

template <typename T>
void A<T>::abc()
{
value++;
}

Что я хочу сделать, это создать специализацию шаблона для этого класса, скажем, int,

template <>
class A<int>{
public:
int value;
void abc();
};

Вопрос в том: Какой правильный синтаксис для реализации abc() для специализированного класса?

Я попытался использовать следующий синтаксис:

template <>
void A<int>::abc()
{
value += 2;
}

Однако это не компилируется.

4

Решение

void A<int>::abc()
{
value += 2;
}

поскольку A<int> является explicit specialisation из A<T>,

http://liveworkspace.org/code/982c66b2cbfdb56305180914266831d1

n3337 14.7.3 / 5


Члены явно специализированного шаблона класса
определяется так же, как члены обычных классов, и не использует шаблон<> синтаксис
.

[ Пример:

template<class T> struct A {
struct B { };
template<class U> struct C { };
};
template<> struct A<int> {
void f(int);
};
void h() {
A<int> a;
a.f(16);
}
// A<int>::f must be defined somewhere
// template<> not used for a member of an
// explicitly specialized class template
void A<int>::f(int) { /∗ ... ∗/ }

4

Другие решения

Удалить template<>:

void A<int>::abc()
{
value += 2;
}
4

По вопросам рекламы [email protected]