web-dev-qa-db-fra.com

Comment convertir int enum en C ++?

Comment convertir un int en une énumération en C++?

Par exemple:

_enum Test
{
    A, B
};

int a = 1;
_

Comment convertir a en type _Test::A_?

197
user1509260
int i = 1;
Test val = static_cast<Test>(i);
212
Andrew
Test e = static_cast<Test>(1);
66
bames53

Votre code

enum Test
{
    A, B
}

int a = 1;

Solution

Test castEnum = static_cast<Test>(a);
23
user1515687

Test castEnum = static_cast<Test>(a-1); va lancer un A. Si vous ne voulez pas le sous-produit 1, vous pouvez redéfinir enum:

enum Test
{
    A:1, B
};

Dans ce cas, `Test castEnum = static_cast (a); ' pourrait être utilisé pour lancer un à A.

0
kosolapyj

Etant donné la question finale, "comment convertir un en type Test::A" plutôt que d'être rigide à propos de l'exigence d'avoir un cast, et de répondre plusieurs années en retard, cela semble juste une question populaire, personne d’autre ne semble avoir mentionné l’alternative, selon la norme C++ 11:

5.2.9 Coulée statique

... une expression e peut être explicitement convertie en un type T à l'aide d'un static_cast de la forme static_cast<T>(e) si la déclaration T t(e); est bien formée, pour certains inventé variable temporaire t (8.5). L’effet d’une telle conversion explicite est identique à celui de la déclaration et de l’initialisation, puis de l’utilisation de la variable temporaire comme résultat de la conversion.

Par conséquent, utiliser directement le formulaire t(e) fonctionnera également.

auto result = Test(a);
0
Tommy