2009-07-16 4 views
10

io ho uno scenario simile al seguente:Accesso Namespace Parent in 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 
    }; 

}; 

La mia domanda è - come si fa a ereditare da una classe in una namspace che è il genitore di un altro spazio dei nomi?

Billy3

risposta

7

Inizia con "::"

Per esempio

class criterion : public ::criterion {}; 
12

È necessario specificare lo spazio dei nomi, in questo caso il Global One:

class criterion : public ::criterion 

Nota che C++ non specifica alcun mezzo per navigare nei namespace come se fossero un albero. Ad esempio, non puoi specificare lo spazio dei nomi "genitore" usando ".." o qualsiasi altra stenografia - devi usare il suo nome.

3

Questo compila per me, fondamentalmente solo mostrare esplicitamente in quello spazio dei nomi della classe genitore è:

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

semplificato le regole dello spazio dei nomi di base del C++ sono:

  • È possibile accedere a qualsiasi cosa nel percorso namespace genitore senza specificando spazio dei nomi.
  • È possibile accedere a qualsiasi cosa nel percorso dello spazio dei nomi figlio specificando solo il percorso relativo.
  • Tutto il resto richiede specifiche complete dello spazio dei nomi.