我试图阻止一个类能够将其"this"指针转换为其中一个接口的指针.我通过中间代理类使用私有继承来做到这一点.问题是我发现私有继承使得层次结构中继承类下的所有类都无法访问所有公共静态成员和基类类型.
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!
}
};
Run Code Online (Sandbox Code Playgroud)
我已经在VS2008(所需版本)和VS2010中都尝试过这种方法,但都不行.
谁能想到一个解决方法?或者采用不同的方法来停止转换?
此外,我是行为的好奇心,它只是编译器实现的副作用,还是设计?如果按设计,那么为什么呢?我一直认为私有继承意味着没有人知道中继继承自Base.但是,所展示的行为意味着私有继承意味着更多,事实上,Child比不在类层次结构中的任何命名空间更少访问Base!