从派生类访问受保护的函数
Access protected function from derived class
我有以下典型的场景,我想在子类中隐藏实现细节,并通过接口公开它:
template <typename Derived>
class Interface
{
public:
void a()
{
static_cast<Derived*>(this)->_a();
}
};
class Implementation : public Interface<Implementation>
{
protected:
void _a()
{
/*
...
*/
}
};
我想我理解为什么这不起作用,并且我知道将类Interface
声明为Implementation
的朋友可以解决这个问题,但是当涉及到更复杂的层次结构时,例如多个接口和各种级别的继承(就像我的实际情况一样),事情变得非常混乱。
我想避免在每个实现接口的类中声明friend class Interface<Implementation>
。
对于这个问题是否有另一种简洁的解决方案?
谢谢!
如何使用虚函数和多态性?
在子类中创建对象,并将其重新分配给接口类指针或引用。然后在接口类中创建一个纯虚函数,并在子类中定义它。
相关文章:
- 继承和友元函数,从基类访问受保护的成员
- C++:为什么无法在派生类中访问受保护的构造函数?
- 在父类中公开受保护的构造函数
- 如何实现返回受保护结构的私有函数
- 为什么继承的受保护构造函数不能公开?
- 基类中受保护的纯虚函数如何被基类的友元类使用?
- 有没有办法通过 main 函数访问受保护的矢量大小而无需将其转换为公共?
- 拥有"受保护的非虚拟析构函数"与"受保护虚拟析构构函数"有什么好处
- 在 lambda 函数 g++-4.8 中调用继承的受保护子类型
- 在派生类中具有相同签名但继承为受保护的函数
- 如何将超类的受保护成员访问到其派生类. 如果已在派生类中声明了具有相同名称的函数?
- 受保护的析构函数禁用在堆栈上创建派生类的对象?
- 将派生类构造函数参数传递给受保护的成员
- 在派生类的构造函数初始化中无法访问受保护的函数
- 如何将 std::unique_ptr<Parent> 与具有受保护虚拟析构函数的只读父类一起使用
- 无法访问派生类函数内的基类的受保护数据成员
- C++,如何创建线程限制/受保护的变量和函数
- 带unique_ptr的受保护析构函数
- 错误 LNK2019:函数"受保护:XYX()"中引用_Direct3DCreate9Ex@8未解析的外部符号
- c++错误:基函数受保护