通过类模板专门化访问成员数据

时间:2018-12-02 19:09:22

标签: c++ template-specialization template-classes

我无法从专门的类访问模板类中定义的成员数据“值”。为什么? 有人可以帮我吗? 谢谢

template <class T>
class A {

public:

  int value;

  A() {
    value = 0;
  }

};


template <> class A<int> {

public:

  A() {
    value = 3;  // Use of undeclared identifier 'value'
    A::value = 3; // No member named 'value' in 'A<int>'
    this->value = 3; // No member named 'value' in 'A<int>'
  }

};

1 个答案:

答案 0 :(得分:3)

显式专业化就像是一门崭新的事物。您无法从主模板中的A<int>的显式专业化访问任何内容,因为它就像一个完全不同的类。

但是,似乎您只想专门构造函数。在这种情况下,您可以这样做:

template <> 
A<int>::A() {
    value = 3;  // ok
}

之所以可行,是因为您只专注于构造函数,而该类的其余部分则取自主模板。