Frage

Seit Klasse Freundschaft in C ++ nicht vererbt wird, was ist der beste Weg, um „fake“ oder?

Ich dachte an dem Freund Klasse private Schnittstelle durch geschützte Methoden in der zu-vererbten Basisklasse auszusetzen, aber das ergibt mit der gleichen Schnittstelle zweimal zu schreiben (und zu halten).

Gibt es andere Möglichkeiten?

War es hilfreich?

Lösung

Die Verwendung einer Taste ist eine mögliche Lösung.

Die Idee ist, dass Sie nur die Operationen freischalten können, wenn Sie einen Schlüssel ... aber ein Beispiel ist im Wert von Tausenden auf Wort taucht also lasst sie:

// Step 1: The key
class NeedAccess;

namespace details { class Key { friend NeedAccess; Key() {} }; }

// Step 2: NeedAccess
class NeedAccess
{
protected:
  static details::Key GetKey() { return details::Key(); }
};

// Step 3: The big one
class BigOne
{
public:
  void lockedMethod(details::Key);
};

Die Frage des Schlüssel Seiner Kopie konstruierbar ist bis zu Diskussion. Ich verstehe nicht, was Sie verhindern, dass es gewinnen.

Ein weiterer Vorteil ist, dass Sie mehrere Schlüssel haben kann, je nachdem, welche Methode Sie zugreifen möchten, auf diese Weise Sie ‚teilweise‘ Freundschaft gewähren, und Ihre ‚teilweise‘ Freunde können nicht herumspielen mit Ihrem privaten Teile, trotz der berühmten Anspruch!

Bearbeiten :

Diese Methode ist begrenzt Freundschaft genannt und wurde auf comp.lang.c ++. moderierte .

Der Hauptvorteil dieses Verfahrens im Vergleich zu rel="noreferrer">, ist die lose Kopplung, da nur vorwärts Erklärungen notwendig sind.

scroll top