我想阻止一个类能够将其'this'指针转换为其接口之一的指针。我通过使用中间代理类的私有继承来实现此目的。问题是我发现私有继承使所有基类的公共静态成员和类型都无法访问层次结构中继承类的所有类。C++私有继承和静态成员/类型
class Base
{
public:
enum Enum
{
value
};
};
class Middle : private Base
{
};
class Child : public Middle
{
public:
void Method()
{
Base::Enum e = Base::value; // doesn't compile BAD!
Base* base = this; // doesn't compile GOOD!
}
};
我已经在VS2008(所需版本)和VS2010中都试过这个,都没有工作。
任何人都可以想到一个解决方法吗?或者停止转换的另一种方法?
此外,我是行为的好奇心,它只是编译器实现的副作用,还是它的设计?如果通过设计,那么为什么?我一直认为私有继承意味着没有人知道从基地继承中间。然而,所展示的行为意味着私有继承意味着更多,实际上,Child没有比任何名称空间更少的对Base的访问权限!
+1:的确是一个非常有趣的问题。 – 2010-06-15 18:15:23