Wie man Freund für abgeleitete Klassen propagiert

Ich möchte eine Klassenhierarchie, und können zum erstellen von Objekten aus, die es nur innerhalb einer Fabrik.

Beispiel:

class Base
{
    protected:
        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!
        SomeClass(){};
        void Init(){};
};

class Factory
{
    public:
        template<class T>
        T* Get()
        {
            T* obj = new T();
            obj->Init();

            return obj;
        }
};

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

Mein problem ist, dass ich möchte in der Lage sein, um Objekte, die nur von der Fabrik, aber ich will nicht zu erklären friend class Factory in jeder Klasse abgeleitet von der Basisklasse.

Gibt es eine Möglichkeit, zu propagieren Freund in abgeleiteten Klassen? Gibt es eine andere Möglichkeit, dieses Verhalten zu erreichen?

Kommentar zu dem Problem
Sie können nicht Erben FreundSchiff. Siehe diese Antwort: stackoverflow.com/questions/13844129/... Kommentarautor: Masked Man
Beachten Sie, dass protected ist nur geringfügig restriktiver als public. Niemand wäre in der Lage, zu Erben von SomeClass und eine Möglichkeit bieten, in Ihrer protected Mitglieder. Kommentarautor: Gorpik

InformationsquelleAutor der Frage Felics | 2012-12-17

Schreibe einen Kommentar