1

foo.h

class Foo {};

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

foo.cpp

Foo foo; // Ok

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

如何在 * .cpp文件中隐藏(隔离)类 Bar ?

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

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

4

2 回答 2

4

目前尚不清楚您的要求是什么。如果您只想Bar在特定.cpp文件中可见,那很容易:

富.h:

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

foo.cpp:

#include "foo.h"

namespace {
    class Bar {};
}

Foo foo;

Bar bar;

请注意,这会限制to的所有可见性。外面的任何人都不会意识到它甚至存在。Barfoo.cppfoo.cpp

但是,实际上并没有一种方法可以使类仅在标头中可见-标头的全部意义在于您将其包含在一个或多个.cpp文件中,并且当您这样做时,它包含的任何内容都会在该.cpp文件中可见。

如果这就是您认为自己想要的,那么您很有可能需要退后一步,告诉我们您真正想要实现的目标。可能有一种方法,但是您尝试的方法几乎肯定是错误的。基本划分是标题用于一般可见的内容;任何私有的东西都被限制在实现(.cpp)文件中。

于 2012-07-20T18:14:16.243 回答
0

这个怎么样

class Foo
{
private:
     struct Bar
     {

     };

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


int main()
{

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


    return 0;
}
于 2012-07-20T18:19:56.600 回答