Доступ к родительскому пространству имен в С++

У меня есть сценарий следующего вида:

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

Ответ 1

Начните с "::"

Например

class criterion : public ::criterion {};

Ответ 2

Вам нужно указать пространство имен, в этом случае глобальное:

 class criterion : public ::criterion 

Обратите внимание, что С++ не указывает никаких средств навигации по пространствам имен, как если бы они были деревом. Например, вы не можете указать "родительское" пространство имен, используя ".." или любую другую стенографию - вы должны использовать свое имя.

Ответ 3

Этот компилятор для меня, в основном просто явно показывает, в каком пространстве имен находится родительский класс:

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

Ответ 4

Упрощенные основные правила пространства имен С++:

  • Вы можете получить доступ к чему-либо в родительском пути пространства имен без указания пространства имен.
  • Вы можете получить доступ к чему-либо в пути дочернего пространства имен, указав только относительный путь.
  • Все остальное требует полных спецификаций пространства имен.