我有很多类Bar1、Bar2等等,它们都共享一个公共的父类Foo。我想把它们完全隐藏起来,只想通过Foo的虚拟方法提供的接口来访问它们。我试图将它们嵌套为Foo的私有类,比如:
class Foo
{
public:
Foo ();
static Foo *MakeBar (int someParams);
private:
class Bar1 : public Foo
{
Bar1 () : Foo () {}
};
class Bar2 : public Foo
{
Bar2 () : Foo () {}
};
// etc
};但是,这是不可能的,因为Foo类在声明类Bar1时是不完整的。是否有任何其他方法来防止直接访问子类?
发布于 2014-12-12 11:02:22
尝试将继承的类从类声明移动到实现单元中的未命名命名空间。就像这样:
foo.h
class Foo
{
public:
Foo ();
static Foo *MakeBar (int someParams);
};foo.cpp
#include "foo.h"
namespace {
class Bar1 : public Foo
{
Bar1 () : Foo () {}
};
class Bar2 : public Foo
{
Bar2 () : Foo () {}
};
} // endof unnamed namespace
Foo *Foo::MakeBar (int someParams)
{
// do stuff here
}https://stackoverflow.com/questions/27441984
复制相似问题