繁体   English   中英

从派生类访问受保护的函数

[英]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>

是否有替代好的解决方案来解决此问题?

谢谢!

如何使用虚函数和多态性?

在子类中创建一个对象,然后将其重新分配给接口类的指针或引用。 然后在您的接口类中创建一个纯虚函数,并在您的子类中对其进行定义。

您可以编写Interface的构造函数,以便必须为它提供调用_a的函数。 那是:

template<class Derived>
class Interface
{
protected:
     explicit Interface(TypeForUnderscoreA fa);

};

然后使用它。

问题是什么是TypeForUnderscoreA 有一些选择。 最简单的方法是使其成为std::function 这会起作用,但是,大概是您做了CRTP来避免虚拟功能。 使用mem_fun和一些强制转换(难看但隐藏在Interface ),将使您降低简单间接mem_fun的成本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM