2016-12-17 89 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