2009-07-16 94 views
10

我有像下面這樣的場景:訪問父命名空間在C++

class criterion 
{ 
// stuff about criteria... 
}; 
namespace hex { 

    class criterion : public criterion //does not compile 
    {         //This should inherit from the 
    //A hex specific criterion   //criterion class in the global namespace 
    }; 

}; 

我的問題是 - 如何在一個namspace這是另一個命名空間的父做一個繼承一個類?

Billy3

回答

7

開始用 「​​::」

例如

class criterion : public ::criterion {}; 
12

你需要指定的命名空間,在這種情況下,全球性的:

class criterion : public ::criterion 

注C++沒有指定任何方式來瀏覽命名空間,就好像它們是一棵樹。例如,您不能使用「..」或其他簡寫形式指定「父」名稱空間,您必須使用其名稱。

3

這編譯對我來說,基本上只是明確表明在哪些命名空間中的父類是:

class A 
{}; 
namespace B { 
    class A : public ::A 
    {}; 
    namespace C { 
     class A : public B::A 
     {}; 
    } 
}; 
1

簡化基本的C++命名規則是:

  • 您可以在不訪問父命名空間路徑什麼指定命名空間。
  • 通過指定相對路徑,您可以訪問子名稱空間路徑中的任何內容。
  • 其他一切都需要完整的命名空間規範。