Voici ce que je suis en train de faire:C++ permettent dérivé classes d'ami d'avoir accès à la classe imbriquée privée
class A
{
friend class C (and all of C's derived classes)
public:
void DoAThing() { mpMyC->DelegateResponsibility(myB); }
private:
class B
{
};
B mMyB;
C* mpMyC;
};
class C
{
// No problem here- C can see B
virtual void DelegateResponsibility(const A::B& necessaryInfo);
};
class D: public C
{
// Uh-oh- we don't inherit friendship
virtual void DelegateResonsibility(const A::B& necessaryInfo);
};
En bref, j'ai une classe imbriquée privée à l'intérieur A, car il est un détail de mise en œuvre de Cependant, j'aimerais déléguer certaines responsabilités de A aux classes dérivées de C et C pour obtenir un comportement polymorphe. Je souhaite éviter d'ajouter une ligne de classe d'amis chaque fois que quelqu'un dérive de C. La solution de contournement standard donnée pour les classes d'amis dérivées est "ajouter une fonction accesseur protégée à votre classe de base et la remplacer pour les membres dérivés". aide à accéder aux membres privés de la classe A, et non aux classes à portée privée. Existe-t-il un moyen de contourner ce problème?
Hourra! Merci - cela a fonctionné. – dbromberg
Cela ne fonctionnera pas exactement comme vous l'avez écrit: par défaut 'MyB' sera un membre privé de' C'. – dyp