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文件
也许有某种类的封装技术?
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文件
也许有某种类的封装技术?
目前尚不清楚您的要求是什么。如果您只想Bar
在特定.cpp
文件中可见,那很容易:
富.h:
// add include guard here.
class Foo {};
foo.cpp:
#include "foo.h"
namespace {
class Bar {};
}
Foo foo;
Bar bar;
请注意,这会限制to的所有可见性。外面的任何人都不会意识到它甚至存在。Bar
foo.cpp
foo.cpp
但是,实际上并没有一种方法可以使类仅在标头中可见-标头的全部意义在于您将其包含在一个或多个.cpp
文件中,并且当您这样做时,它包含的任何内容都会在该.cpp
文件中可见。
如果这就是您认为自己想要的,那么您很有可能需要退后一步,告诉我们您真正想要实现的目标。可能有一种方法,但是您尝试的方法几乎肯定是错误的。基本划分是标题用于一般可见的内容;任何私有的东西都被限制在实现(.cpp
)文件中。
这个怎么样
class Foo
{
private:
struct Bar
{
};
void func()
{
Bar b; //ok
}
};
int main()
{
Foo f; //ok
Foo::Bar b; //error
return 0;
}