2011-07-06 26 views
6

Tengo un archivo de encabezado en el que deseo usar un alias del espacio de nombres al definir una clase. Sin embargo, no quiero exponer este alias a nada que incluya el archivo de encabezado.Problemas del ámbito del alias del espacio de nombres

// foo.h 
namespace qux = boost::std::bar::baz::qux; // ! exposed to the world 
class foo 
{ 
    // can't put a namespace alias here 

    // stuff using qux:: 
}; 

¿Cómo puedo alias un espacio de nombres para una declaración de clase sin que se filtre a todas partes?

Respuesta

12
namespace MyClassSpace 
{ 
namespace qux = boost::std::bar::baz::qux; 

class foo 
{ 
    // use qux:: 
}; 

} 

using MyClassSpace::foo; // lift 'foo' into the enclosing namespace 

Ésta es también la forma en la mayoría de las bibliotecas Boost hacerlo, ponen todas sus cosas en un espacio de nombres separado y levantar los identificadores importantes en el espacio de nombres boost.

+0

¡Neto! +1 viene después del reinicio de la votación. –

+0

@Kerrek: ¡Qué apropiado, acabo de llegar a mi repcap y necesito esperar a que se restablezca! :) – Xeo

+0

Bastardo, estoy tratando desesperadamente de hacer el mío en las próximas dos horas ;-) –

Cuestiones relacionadas