【问题标题】:Member function syntax in class template specialization类模板特化中的成员函数语法
【发布时间】:2012-09-04 09:08:42
【问题描述】:

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

但是这不能编译。

【问题讨论】:

  • 顺便说一句,如果您没有专门化整个类模板,您的语法也会起作用。您可以专门化各个成员函数。

标签: c++ templates syntax template-specialization


【解决方案1】:
void A<int>::abc()
{
   value += 2;
}

因为A&lt;int&gt;explicit specialisationA&lt;T&gt;

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

【讨论】:

    【解决方案2】:

    删除template&lt;&gt;:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      相关资源
      最近更新 更多