How to propagate friend for derived classes

I want to have a class hierarchy and be able to create objects from it only inside a Factory.


class Base
        virtual void Init(){};

    friend class Factory;

class SomeClass : public Base
    public://I want protected here! Now it's possible to call new SomeClass from anywhere!
        void Init(){};

class Factory
        template<class T>
        T* Get()
            T* obj = new T();

            return obj;

int main()
    Factory factory;
    SomeClass *obj = factory.Get<SomeClass>();

My problem is that I want to be able to make objects only from Factory, but I don’t want to declare friend class Factory in every class derived from Base.

Is there any way to propagate friend in derived classes? Is there any other way to achieve this behavior?


No, it’s deliberately impossibile.

Is an issue by encapsulation.

Suppose to have a class “PswClass” that manage any password, that is cascade friend with other class: if I inherit from PswClass:

 class Myclass : public PswClass {

In this way I can, maybe, have access to field that it would be private.