클래스에서 '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, 어느 작업이 시도했습니다.
해결 방법은 누구나 생각할 수 있습니까? 또는 전환을 중지하는 다른 방법은 무엇입니까?
또한 나는이 동작의 골자를 쓰고 있는데, 이것은 컴파일러 구현의 부작용입니까, 아니면 의도적으로 설계된 것입니까? 설계 상으로는 그렇다면 왜 그렇습니까? 나는 항상 개인이 상속으로 생각하여 미들이 기지에서 물려 받았다는 것을 아무도 모른다는 것을 의미합니다. 그러나 전시 된 행동은 사적 상속이 그 이상을 의미한다는 것을 의미합니다. 실제로 클래스 계층 구조가 아닌 모든 네임 스페이스보다 Base에 대한 액세스 권한이 적습니다.
+1 : 정말 흥미로운 질문입니다. –