下面的代碼是合法的C++嗎?聲明但不定義內部結構/類 - 合法的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文件中,這樣我就不必在公共接口中引入「上下文」定義。
我只是在製作幾個上下文類的過程中,所以我也很感興趣。順便說一下,使countDrinks公共訪問。 – stefaanv 2009-10-14 07:50:32
我是否認爲你指的是Foo :: Bar類定義? – MSalters 2009-10-14 07:59:29