name enum ejemplo code c++ c++11 enums nested forward-declaration

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í:

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.