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

Posted

技术标签:

【中文标题】通过类模板特化访问成员数据【英文标题】: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>'
  

;

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

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

以上是关于通过类模板特化访问成员数据的主要内容,如果未能解决你的问题,请参考以下文章

C++模板编程中只特化模板类的一个成员函数(花样特化一个成员函数)

类模板特化中的成员变量别名

这是为成员函数的 C++ 模板部分特化构造类的好方法吗?

C++中模板类成员函数的特化

成员模板变量特化

Clang 是不是正确拒绝仅通过特化定义类模板的嵌套类的代码?