5

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

2 回答 2

4

删除template<>

void A<int>::abc()
{
   value += 2;
}
于 2012-09-04T09:12:07.753 回答
4
void A<int>::abc()
{
   value += 2;
}

因为A<int>是. explicit specialisation_A<T>

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

n3337 14.7.3/5

显式特化类模板的成员以与普通类成员相同的方式定义,而不是使用 template<> 语法

[ 例子:

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) { /∗ ... ∗/ }

于 2012-09-04T09:12:13.573 回答