Federico Allocati
Federico Allocati

Reputation: 565

Access protected function from derived class

I have the following typical scenario, in which I want to hide implementation details in a child class, and expose it through an interface:

template <typename Derived>
class Interface
{
public:
    void a()
    {
        static_cast<Derived*>(this)->_a();
    }
};

class Implementation : public Interface<Implementation>
{
protected:
    void _a()
    {
        /*
        ...
        */
    }
};

I think I understand why this doesn't work, and I know that declaring the class Interface as friend of Implementation solves it, but when it comes to more complex hierarchies, like multiple interfaces, and various levels of inheritance(as is my real case), things get really messy.

I would like to avoid having to declare friend class Interface<Implementation> in each class that implements an interface.

Is there an alternative nice-and-clean solution for this problem?

Thanks!

Upvotes: 0

Views: 138

Answers (1)

Wandering Fool
Wandering Fool

Reputation: 2278

How about using virtual functions and polymorphism?

Create an object in your child class and reassign it to an interface class pointer or reference. Then create a pure virtual function in your interface class and define it in your child class.

Upvotes: 1

Related Questions