通过类模板特化访问成员数据
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<int>
的显式特化访问任何内容,因为它就像一个完全不同的类。
但是,您似乎只想专门化构造函数。在这种情况下,您可以这样做:
template <>
A<int>::A()
value = 3; // ok
这是可行的,因为您只特化了构造函数,而该类的其余部分取自主模板。
【讨论】:
非常感谢!我现在一切都清楚了。但是,如果您无法访问主模板的成员,那么显式特化又有什么意义呢? @thewoz 好吧,当您需要为特定类型执行不同的操作时,会使用显式特化。通常,您不需要主模板中的任何内容。但是,如果您在两者中确实需要相同的东西,通常的技术是创建一个非模板基类,然后您从主特化和显式特化继承。 好的,明白了。该示例是对我实际需要的内容的简化。整数值;应该是T值;除此之外,要对构造函数进行专门化,我还需要对某些函数进行专门化。 @thewoz 如果他们在做其他事情,那么是的。以上是关于通过类模板特化访问成员数据的主要内容,如果未能解决你的问题,请参考以下文章