#include <iostream>
struct a
{
enum LOCAL_A
{
A1,
A2
};
};
enum class b
{
B1,
B2
};
int foo(int input)
{
return input;
}
int main(void)
{
std::cout<<foo(a::A1)<<std::endl;
std::cout<<foo(static_cast<int>(b::B2))<<std::endl;
}
Il a::LOCAL_A
è ciò che l'enum fortemente tipizzato sta cercando di raggiungere, ma c'è una piccola differenza: enumerazioni normali possono essere convertiti in tipo intero, mentre fortemente tipizzati enumerazioni non possono farlo senza un cast.Come convertire automaticamente enum fortemente tipizzato in int?
Quindi, c'è un modo per convertire un valore enum fortemente tipizzato in un tipo intero senza cast? Se sì, come?
Dai un'occhiata alla risposta di Khurshid Normuradov. Viene il "modo naturale" ed è molto simile a "The C++ Programming Language (4th ed.)". Non viene in un "modo automatico", e questo è positivo. – PapaAtHome
@PapaAtHome Non capisco il vantaggio di questo rispetto a static_cast. Non ci sono molti cambiamenti nella dattilografia o nella pulizia del codice. Qual è il modo naturale qui? Una funzione che restituisce valore? –
@ user2876962 Il vantaggio, per me, è che non è automatico o 'silenzioso' come dice Iammilind. Ciò impedisce al difficile di trovare errori. Puoi ancora fare un cast ma sei costretto a pensarci. In questo modo sai cosa stai facendo. Per me è parte di un'abitudine 'codifica sicura'. Preferisco che le conversioni non vengano eseguite automaticamente. C'è una piccola possibilità che possa introdurre un errore. Parecchi cambiamenti in C++ 11 relativi al sistema di tipo rientrano in questa categoria se me lo chiedi. – PapaAtHome