Il seguente codice è legale C++ o no?Dichiarare ma non definire struct/class inner - legal C++ o no?
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);
}
Sia Visual C++ e GCC accetta, ma il codice sembra un po 'strano per me e mi dispiacerebbe averlo rifiutato da qualche futuro compilatore.
Tuttavia, il modello mi sembra utile per ridurre le dipendenze del tempo di compilazione - lo uso spesso per dichiarare le strutture che sono utilizzate per passare un "contesto" (un gruppo di variabili) che sono condivise tra alcune funzioni che risiedono tutte nello stesso file cpp, e in questo modo non devo introdurre la definizione di "contesto" nell'interfaccia pubblica.
Sono appena in procinto di creare un paio di classi di contesto, quindi sono anch'io interessato. A proposito, rendere countDrinks accessibili al pubblico. – stefaanv
Ho ragione ad assumere che ti riferisci alla definizione di 'classe Foo :: Bar'? – MSalters