manière conforme aux normes de typedef mes enums

Comment puis-je me débarrasser de l’avertissement sans cibler explicitement l’énumération? Le code conforme aux normes serait à comparer à foo::bar::mUpload (voir ici ), mais les scopes explicites sont très longues et rendent la chose sacrément illisible.

Peut-être y a-t-il une autre façon de ne pas utiliser typedef? Je ne veux pas modifier l’énumération – je ne l’ai pas écrite et elle est utilisée ailleurs.

warning C4482: nonstandard extension used: enum 'foo::bar::baz' used in qualified name

 namespace foo { class bar { enum baz {mUpload = 0, mDownload}; } } typedef foo::bar::baz mode_t; mode_t mode = getMode(); if (mode == mode_t::mUpload) //C4482 { return uploadthingy(); } else { assert(mode == mode_t::mDownload); //C4482 return downloadthingy(); } 

Si l’énumération est définie dans une classe, le mieux que vous puissiez faire est de la class_name::value dans votre propre domaine et d’utiliser simplement class_name::value ou de définir un typedef de la classe. En C ++ 03, les valeurs d’une énumération font partie de la scope englobante (qui dans votre cas est la classe). En C ++ 0x / 11, vous pourrez qualifier les valeurs avec le nom enum:

 namespace first { namespace second { struct enclosing { enum the_enum { one_value, another }; } }} using first::second::enclosing; typedef first::second::enclosing the_enclosing; assert( enclosing::one_value != the_enclosing::another ); 

Dans le futur, votre utilisation sera correcte (C ++ 11):

 typedef first::second::enclosing::the_enum my_enum; assert( my_enum::one_value != my_enum::another ); 

Vous pouvez inclure votre énumération dans un espace de noms, puis utiliser une instruction using sur cet espace de noms.

Cela ne fonctionne évidemment que pour enum en dehors de la classe.

Dans votre cas, je ne vois pas pourquoi vous ne l’ bar::mUpload (après avoir using namespace foo ou using foo::bar )

Vous pouvez utiliser un typedef pour foo :: bar:

 typedef foo::bar fb; //... fb::baz m = fb::mUpload; 

Ou cherchez-vous quelque chose de différent?