![](/img/trans.png)
[英]C++: “specializing” a member function template to work for derived classes from a certain base class
[英]C++ keeping access to protected member (of the function argument) when specializing base template class
任何人都可以帮助解决此问题(该问题在GCC和VC ++中均持续存在)。
template <class T> class A{
protected:
T a;
public:
A(int aa=0){a=aa;}
virtual ~A(){}
virtual void plus(A const *AA){a=a+AA.a;}
};
class B:public A<int>{
public:
B(int bb=0):A<int>(bb){}
virtual ~B(){}
void plus(A<int> const *AA){a=a+AA->a;} //<--PROBLEM: I can access a but not AA->A?
};
这是预料之中的。
B的实例无权戳入任意 A的内部; 它仅有权访问(其他)B的A部分。 这就是protected关键字的含义。
这不是编译器的问题,而是标准的一致行为。 您只能通过this
(隐式或显式)访问基类的受保护成员。
看起来应该像这样:
class B:public A<int>{
public:
B(int bb=0):A<int>(bb){}
virtual ~B(){}
void plus(A<int> const *AA){this->A::plus(AA);}
};
如果这样做,则无需在派生类中重新实现plus函数。
“ UncleBens”已经回答了您的主要问题,但有一些详细信息...
第一:
virtual void plus(A const *AA){a=a+AA.a;}
由于AA
是一个指针,因此您无法执行AA.a
... ;-)
其次,请注意,成员指针通常不尊重可访问性。 仅使用隐式转换,您就可以访问基类的受保护内容。 成员指针的可访问性与流控制的goto
几乎相同。
干杯,……
–阿尔夫
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.