Existe uma maneira de converter um enum class
campo para o tipo subjacente? Achei que seria automático, mas aparentemente não.
enum class my_fields : unsigned { field = 1 };
unsigned a = my_fields::field;
Essa atribuição está sendo rejeitada pelo GCC. error: cannot convert 'my_fields' to 'unsigned int' in assignment
.
enum
.[C++11: 7.2/9]
.Respostas:
Acho que você pode usar std :: subjacente_type para saber o tipo subjacente e, em seguida, usar cast:
Com isso, você não precisa assumir o tipo subjacente, ou não precisa mencioná-lo na definição de algo
enum class
semelhanteenum class my_fields : int { .... }
.Você pode até escrever uma função de conversão genérica que deve ser capaz de converter qualquer um
enum class
em seu tipo integral subjacente :então use-o:
E como a função é declarada como sendo
constexpr
, você pode usá-la onde a expressão constante é necessária:fonte
template <typename T> auto to_integral(T e) { return static_cast<std::underlying_type_t<T>>(e); }
constexpr
no futuro; na verdade, um muito mais poderoso do que o que eu tinha em 2013: P)Você não pode convertê-lo implicitamente , mas uma conversão explícita é possível:
Lembre-se também do fato de que o ponto-e-vírgula deve estar após a chave fechada na definição de enum, não antes.
fonte
Acho a seguinte função
underlying_cast
útil ao ter que serializar valores enum corretamente.fonte
Como outros apontaram, não há conversão implícita, mas você pode usar uma conversão explícita
static_cast
. Eu uso as seguintes funções auxiliares em meu código para converter de e para um tipo de enum e sua classe subjacente.Código de uso
fonte