【问题标题】:Access to a member data via a class template specialisation通过类模板特化访问成员数据
【发布时间】:2018-12-02 19:09:22
【问题描述】:

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

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>'
  }

};

【问题讨论】:

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


    【解决方案1】:

    一个明确的专业化就像一个全新的东西。您无法通过主模板中 A&lt;int&gt; 的显式特化访问任何内容,因为它就像一个完全不同的类。

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

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

    这是可行的,因为您只特化了构造函数,而该类的其余部分取自主模板。

    【讨论】:

    • 非常感谢!我现在一切都清楚了。但是,如果您无法访问主模板的成员,那么显式特化又有什么意义呢?
    • @thewoz 好吧,当您需要为特定类型执行不同的操作时,会使用显式特化。通常,您不需要主模板中的任何内容。但是,如果您在两者中确实需要相同的东西,通常的技术是创建一个非模板基类,然后您从主特化和显式特化继承。
    • 好的,明白了。该示例是对我实际需要的内容的简化。整数值;应该是T值;除此之外,要对构造函数进行专门化,我还需要对某些函数进行专门化。
    • @thewoz 如果他们在做其他事情,那么是的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多