foo.h
class Foo {};
namespace {
class Bar {};
//...
}foo.cpp
Foo foo; // Ok
Bar bar; // Ok, but I want Error!如何在*.cpp文件中隐藏(隔离)类栏?
也就是说,我不想将class Bar {}从*.h文件导入到*.cpp文件中
也许有某种类型的类封装技术?
发布于 2012-07-20 18:14:16
还不清楚你到底想要什么。如果您只希望Bar在特定的.cpp文件中可见,这非常容易:
F.h:
// add include guard here.
class Foo {};foo.cpp:
#include "foo.h"
namespace {
class Bar {};
}
Foo foo;
Bar bar;请注意,这将Bar的所有可见性限制为foo.cpp。foo.cpp之外的任何东西都不会意识到它的存在。
实际上,没有一种方法可以使类只在头文件中可见--标题的全部意义是将其包含在一个或多个.cpp文件中,当您这样做时,它包含的内容在该.cpp文件中变得可见。
如果你认为这是你想要的,那么很有可能你需要后退一步,告诉我们你真正想要达到的目标。也许有办法,但你想要的方式几乎肯定是错的。基本的划分是,标题用于一般可见的内容;任何私有的内容都被限制为实现(.cpp)文件。
发布于 2012-07-20 18:19:56
这个怎么样?
class Foo
{
private:
struct Bar
{
};
void func()
{
Bar b; //ok
}
};
int main()
{
Foo f; //ok
Foo::Bar b; //error
return 0;
}https://stackoverflow.com/questions/11584689
复制相似问题