2009-07-16 16 views
10

Mam scenariusz, jak następuje:Dostęp do przestrzeni nazw dominującą w 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 
    }; 

}; 

Moje pytanie brzmi - w jaki sposób można dziedziczyć po klasie w namspace który jest rodzicem innej przestrzeni nazw?

Billy3

Odpowiedz

7

start z "::"

Na przykład

class criterion : public ::criterion {}; 
12

musisz określić przestrzeń nazw, w tym przypadku globalny:

class criterion : public ::criterion 

Note to, że C++ nie określa żadnych sposobów nawigacji w przestrzeni nazw, tak jakby były drzewem. Na przykład nie możesz określić "rodzicielskiej" przestrzeni nazw za pomocą ".." lub jakiegokolwiek innego skrótu - musisz użyć jego nazwy.

3

To kompiluje dla mnie w zasadzie tylko wyraźnie pokazują, w jaki nazw klasa dominująca jest:

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

Uproszczone podstawowa C++ zasady przestrzeni nazw są:

  • Można uzyskać dostęp do czegokolwiek w ścieżce obszaru nazw rodzic bez określanie przestrzeni nazw.
  • Możesz uzyskać dostęp do wszystkiego, co znajduje się w podrzędnej ścieżce obszaru nazw, podając tylko względną ścieżkę.
  • Cała reszta wymaga pełnej specyfikacji przestrzeni nazw.
Powiązane problemy