c++ - code - typedef enum c ejemplo
¿Es posible la declaración futura enum de clase? (2)
No, tal declaración directa no es posible. [decl.enum] / 5 (énfasis en negrita mío):
Si a la clave enum va seguido de un especificador de nombre anidado , el especificador de enumeración se referirá a una enumeración que se declaró previamente directamente en la clase o espacio de nombres al que se refiere el especificador de nombre anidado (es decir, ni heredado ni introducido mediante una declaración using), y el especificador enum aparecerá en un espacio de nombre que encierra la declaración anterior.
(En este caso, el especificador de nombre anidado sería el nombre de su clase seguido de un ::
.)
Sin embargo, podrías poner la enumeración afuera y usar una opaque-enum-declaration.
Esta pregunta ya tiene una respuesta aquí:
- C ++ Reenviar enumeración del ámbito de la clase 1 respuesta
Sé que en C ++ 11 es posible reenviar declarar un tipo enum (si se proporciona el tipo de almacenamiento), por ejemplo
enum E : short;
void foo(E e);
....
enum E : short
{
VALUE_1,
VALUE_2,
....
}
Pero me gustaría reenviar declarar una enumeración definida dentro de una clase, por ejemplo
enum Foo::E : short;
void foo(E e);
....
class Foo
{
enum E : short
{
VALUE_1,
VALUE_2,
....
}
}
¿Algo como esto es posible en C ++ 11?
Como dice @Columbo, no puedes declararlo en la forma que especifiques.
Sin embargo, puede reenviar declarar el enum anidado dentro de la declaración de clase:
class Foo
{
enum E : short;
};
void foo(Foo::E e);
enum Foo::E : short
{
VALUE_1,
VALUE_2,
....
};
Si obtienes algún beneficio al hacerlo, depende, por supuesto, de las circunstancias.