【发布时间】:2009-10-14 07:42:29
【问题描述】:
以下代码是否合法 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文件,这样我就不用在公共接口中引入“context”定义了。
【问题讨论】:
-
我正在制作几个上下文类,所以我也很感兴趣。顺便说一句,让 countDrinks 公开访问。
-
我是否正确地假设您指的是
class Foo::Bar定义?
标签: c++ definition inner-classes forward-declaration