2016-12-17 48 views
2

我經常用java編寫, ,我對C++中的靜態嵌套類有點困惑。C++中是否存在類似Java的靜態嵌套類?

我想聲明靜態類,但我得到一個錯誤:

class D 
{ 
    public: 

    static class Listener 
    { 
     public : 

     void foo() 
     { 
      cout << "foo" <<endl; 
     } 
    }; 

}; 

而且我得到以下錯誤

「存儲類只能爲對象和函數指定」

(我正在使用在線編譯器)。

+0

只需跳過'靜態',它應該沒問題。在C++中這不是必需的。 –

+1

C++內部類在它們中沒有「外部」類上下文。它們就像Java默認的「靜態」類一樣。 – StoryTeller

+2

'static inner'是[Java中的矛盾](http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.1.3):「An內部類是一個嵌套類,不是明確或隱式聲明爲靜態的。「 – EJP

回答

9

正確的術語應該是「靜態嵌套類」。

Java中的靜態嵌套類與C++中的正常嵌套類相似,因此只需刪除static即可正常工作。

非靜態類似於Java的人會更難在C++中模擬,因爲沒有編譯器的魔力來自動提供外部類的上下文。您必須通過在內部類中存儲對外部類的引用,在內部類的構造函數中將其初始化,並通過引用顯式訪問外部類的成員來解決此問題。

+2

在Java中沒有這樣的東西作爲'static inner'類。 – EJP

+0

@EJP:我猜「靜態嵌套類」和「非靜態嵌套類」是正確的術語嗎? –

+0

這是正確的。 – EJP