以下代码是否合法的C++代码?
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++ 和 GCC 都可以接受这个代码,但是对我来说,这个代码看起来有些奇怪,我不想在将来的编译器中被拒绝。
然而,这种模式对我来说似乎很有用,可以减少编译时的依赖性。我经常使用它来声明结构体,这些结构体用于传递一些“上下文”(一堆变量),这些变量被多个函数共享,这些函数都驻留在同一个 cpp 文件中,这样我就不必将“上下文”定义引入公共接口。
class Foo::Bar
的定义,对吗? - MSalters