我想阻止一個類能夠將其'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