2010-10-13 17 views
5

tengo una clase que incluye un enum:Exportación parte del espacio de nombres de una clase

class appearance{ 
    // ... stuff ... 
    enum color {BLUE, RED, GREEN}; 
}; 

me gustaría adjuntar parte del espacio de nombres (con using) para que yo pueda hacer referencia al valor de la BLUE simplemente como BLUE, en lugar de appearance::BLUE. Al mismo tiempo, me gustaría mantener el enum dentro del class{}, ya que creo que es más natural. He intentado varias combinaciones de namespace y using, pero fue en vano.

¿Alguna sugerencia?

+0

que tenía un problema similar: para acortar el nombre a una enumeración. 'long :: path :: to :: enum' donde' to' era la clase que contenía la enumeración. Como no podía reenviar a un espacio de nombres corto y personalizado, decidí crear una subclase de clase 'a':' clase Mine: public A {public: using long :: path :: to; privado: Mine() {}; }; 'Como puedes ver, prohíbo generar instancias de esta clase por un constructor privado, por lo que ahora podría usarlo de una forma mucho más corta' Mine :: enum'. Sin conversión de tipo, etc. – math

Respuesta

3

No creo que se pueda hacer. AFAIK, puede usar using appearance::color en otra clase o estructura según lo estipulado here.

Una declaración using en una clase A puede nombre de uno de los siguientes:

  • Un miembro de una clase base de A

  • Un miembro de una unión anónima que es una miembro de una clase base de A

  • Un enumerador para un tipo de enumeración que es miembro de una clase base de A

1

No creo que pueda hacer esto con un enum con clase. Probablemente, la única manera de lograr algo similar es encerrar la enumeración en su propio espacio de nombres distintivo y luego usar eso donde sea necesario para estar en la enumeración.

EDIT: en esta pregunta How do you import an enum into a different namespace in C++? Muestro una forma posible de importar una enumeración de un espacio de nombres a otro, pero no creo que funcione (como es de todos modos) para este caso de clase.

1

Como dijo Jacob, no puedes hacer esto directamente, pero puedes hacerlo encapsulando la enumeración dentro de su propio espacio de nombres.

namespace enums{ 
     enum color 
     {BLUE 
     ,RED 
     ,GREEN}; 
} // namespace enums 


using namespace enums; 
class Foo 
{ 
    int Bar(){return BLUE;} 
} 

algo así debería funcionar ...

+0

El OP mencionó "Me gustaría mantener la enumeración dentro de la clase {}". – casablanca

Cuestiones relacionadas