2009-07-16 14 views
10

Tengo un escenario como el siguiente:Acceso espacio de nombres de los padres en 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 
    }; 

}; 

Mi pregunta es - ¿Cómo se puede heredar de una clase en un namspace que es el padre de otro espacio de nombres?

Billy3

Respuesta

7

comienzan con "::"

Por ejemplo

class criterion : public ::criterion {}; 
12

Es necesario especificar el espacio de nombres, en este caso el uno mundial:

class criterion : public ::criterion 

Nota que C++ no especifica ningún medio para navegar espacios de nombres como si fuera un árbol. Por ejemplo, no puede especificar el espacio de nombres "principal" con ".." o cualquier otra forma abreviada; debe usar su nombre.

3

Esto compila para mí, básicamente, sólo mostrar explícitamente en lo espacio de nombres de la clase padre es:

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

simplificado básica de C++ reglas de espacio de nombres son:

  • Usted puede acceder a cualquier cosa en el camino de espacio de nombres de los padres y sin especificando el espacio de nombres.
  • Puede acceder a cualquier elemento de la ruta del espacio de nombres secundario especificando solo la ruta relativa.
  • Todo lo demás requiere especificaciones completas del espacio de nombres.
Cuestiones relacionadas