2010-12-16 28 views
-1

如何在函數內部定義類以便彼此「知道」?這是我試圖理解的一個非常愚蠢的版本。我想做類似的事情:在函數內聲明的相互C++類

void foo() { 

    struct A { 
     static void bar() { 
      B::hmm(); 
     } 
    }; 

    struct B { 
     static void hmm() { 
      A::bar(); 
     } 
    } 
} 

這不起作用,因爲A :: bar()對B還不瞭解。在函數之外,我可以推遲A :: bar()的定義,直到聲明B爲止。類似於:

void foo() { 

    struct A { 
     static void bar(); 
    }; 

    struct B { 
     static void hmm() { 
      A::bar(); 
     } 
    } 

    void A::bar() { 
     B::hmm(); 
    } 
} 

但是,這似乎不起作用的功能。

代替一些聰明的範圍聲明,使這一切工作,我也歡迎一個明確的答案,這是不可能在C + +(請參考請)。

我知道有其他的方法來解決這個(聲明的foo之外的類,例如),所以我不找就怎麼做類似的東西答案...

+0

爲什麼你不能只使用一個命名空間? – GWW 2010-12-16 06:00:34

+0

@GWW,我認爲你沒看完我的最後一句話。 – xscott 2010-12-16 06:11:16

+0

我讀過它,但我很好奇爲什麼你不能使用命名空間並需要使用函數。 – GWW 2010-12-16 06:13:47

回答

3

你不」噸。

本地類的成員函數必須在類定義的內部定義。

由於A::bar()B::hmm()的含義是相互依存,因爲成員函數不能向前聲明的類定義之外,就沒有辦法訂購的定義,例如,這可以工作。 (你說你不是在尋找解決方法,但是我認爲,在我看來,在一個函數定義中定義任何遠程複雜的類,或多或少的多個類,阻礙了代碼的可讀性,並且是一個不好主意。)

+0

謝謝你的回覆。我在IBM網站上發現了一些基本上相同的文檔。我的Google搜索中缺少「本地課程」這個短語。然而,這不是一個關於風格或可讀性的問題,所以如果你刪除最後一點,我會給你答案的答案。 – xscott 2010-12-16 06:23:01

+2

@xscott:我認爲關於可讀性的評論很重要。如果你不想,你當然可以自由地不接受這個答案。 – 2010-12-16 17:19:03