Le code suivant est-il légal C++ ou non?Déclarez mais ne définissez pas struct/class interne - juridique C++ ou non?
class Foo
{
class Bar;
void HaveADrink(Bar &bar);
void PayForDrinks(Bar &bar);
public:
void VisitABar(int drinks);
};
class Foo::Bar
{
public:
int countDrinks;
};
void Foo::HaveADrink(Bar &bar)
{
bar.countDrinks++;
}
void Foo::PayForDrinks(Bar &bar)
{
bar.countDrinks = 0;
}
void Foo::VisitABar(int drinks)
{
Bar bar;
for (int i=0; i<drinks; i++) HaveADrink(bar);
PayForDrinks(bar);
}
Visual C++ et GCC accepte, mais le code me semble un peu étrange et je ne voudrais pas l'avoir refusée par un compilateur futur.
Néanmoins, le modèle me semble utile pour réduire les dépendances de temps de compilation - je l'utilise souvent pour déclarer des structures qui sont utilisées pour passer un "contexte" (un groupe de variables) partagées par quelques fonctions dans le même fichier cpp, et de cette façon je n'ai pas besoin d'introduire la définition de "contexte" dans l'interface publique.
Je suis juste en train de faire quelques classes de contexte, donc ça m'intéresse aussi. BTW, rendre countDrinks accessible au public. – stefaanv
Ai-je raison de supposer que vous faites référence à la définition de 'class Foo :: Bar'? – MSalters