2017-09-14 1 views
3

Existe-t-il un moyen de connaître la plage de valeurs d'une énumération? Je m'attendais à quelque type_traits modèle comme std::numeric_limits, mais je n'ai trouvé personne.Est-il possible de connaître la portée d'un énumérateur non-fixe?

Par exemple:

enum enm { A = -5, B = 3 }; 

std::cout << std::range_of_enum<enm>::min() << ', ' 
      << std::range_of_enum<enm>::max() << std::endl; 
// Prints -8, 7 with two's complement representation, and -7, 7 
// with one's complement representation. 

REMARQUE: Pour ceux qui ne savent pas quelle est la "plage d'énumération" (terme non standard bien), aller à this question.

+2

Malheureusement non. Il y a un ensemble complexe de règles qui détermine la plage valide, mais pas de façon toute faite pour accéder au résultat. (En outre, les règles sont [prétendument fausses] (https://github.com/cplusplus/draft/pull/1349).) –

+0

Qu'entendez-vous par «range»? –

+0

@NeilButterworth http://fr.cppreference.com/w/cpp/language/enum et recherchez 'static_cast'. –

Répondre

2

n °

Le C++ 2a/2b proposition de réflexion (s) Je l'ai regardé semblent beaucoup plus que assez fort pour calculer, si elles ne disposent pas d'un trait direct. Je ne sais pas la probabilité de standardisation en 2020, ni le texte de la proposition la plus récente pour garantir 100%.