类模板特化中的成员函数语法

时间:2012-09-04 09:08:43

标签: c++ templates syntax template-specialization

我有一个类模板,我们称之为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;
}

但是这不能编译。

2 个答案:

答案 0 :(得分:4)

删除template<>

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

答案 1 :(得分:4)

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

因为A<int>explicit specialisation的{​​{1}}。

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

n3337 14.7.3 / 5

明确专门的类模板的成员是 以与普通类成员相同的方式定义,并且不使用模板&lt;&gt;语法

[例如:

A<T>