2012-07-20 85 views
1

foo.h中如何隔离课堂?

class Foo {}; 

namespace { 
    class Bar {}; 
    //... 
} 

Foo.cpp中

Foo foo; // Ok 

Bar bar; // Ok, but I want Error! 

如何隐藏(绝缘。)类酒吧在* 的.cpp文件

即我不想将* .h文件中的class Bar {}导入*。 cpp文件

也许有某种类的封装技术?

+1

'吧吧;'不可能是确定。它是一个类模板,所以它需要一个模板参数。 – juanchopanza 2012-07-20 18:07:36

+0

好的,我更正了:) – Algorithm 2012-07-20 18:10:31

+3

不要在头文件中使用未命名的名称空间,并且不要在头文件中添加任何要在头文件中的.cpp中可访问的内容。如果它不应该从外面访问,为什么它在首位呢? – 2012-07-20 18:11:55

回答

4

目前尚不清楚你要求的是什么。如果你只是想Bar可见特定.cpp文件中,这是相当容易:

了foo.h:

// add include guard here. 
class Foo {}; 

Foo.cpp中:

#include "foo.h" 

namespace { 
    class Bar {}; 
} 

Foo foo; 

Bar bar; 

注意,这限制所有但是Barfoo.cpp的可见性。 foo.cpp以外的任何内容都不会意识到它甚至存在。

有不是一个真正的方法,使一类只虽然水箱内可见 - 一个头的整点是,你包括在一个或多个.cpp文件,当你这样做,不管它包含变得可见里面那.cpp文件。

如果这就是你认为你想要的,那么你需要退后一步并告诉我们你真正想要完成的事情的机会是相当不错的。可能有一种方法,但你试图去的方式几乎肯定是错误的。基本的划分是标题是一般可见的东西;任何私人都会被限制为执行(.cpp)文件。

0

这个怎么样

class Foo 
{ 
private: 
    struct Bar 
    { 

    }; 

    void func() 
    { 
     Bar b; //ok 
    } 
}; 


int main() 
{ 

    Foo f; //ok 
    Foo::Bar b; //error 


    return 0; 
}