我有一堆类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
时是不完整的。是否有其他方法可以阻止直接访问子类?
答案 0 :(得分:5)
尝试将继承的类从类声明移动到实现单元中的未命名的命名空间。像这样:
class Foo
{
public:
Foo ();
static Foo *MakeBar (int someParams);
};
#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
}
答案 1 :(得分:0)
你可以通过拆分类的声明来完成你想要的(使Bar类对Foo变为私有):
class Foo
{
public:
Foo ();
static Foo *MakeBar (int someParams);
private:
class Bar1;
class Bar2;
// etc
};
class Foo::Bar1 : public Foo
{
Bar1 () : Foo () {}
};
class Foo::Bar2 : public Foo
{
Bar2 () : Foo () {}
};