J'ai un ensemble de valeurs d'énumération définies dans la classe "Foo" (ci-dessous).
namespace Fii
{
class Foo
{
struct Bar
{
enum Baz
{
BAZ1,
BAZ2,
BAZ3
};
};
};
};
J'utilise une structure pour réduire la portée des valeurs de l'enum Baz et pour montrer qu'il existe un groupe de valeurs liées.
Mon objectif est d'assigner une valeur d'un type enum à une variable. En utilisant la définition de la classe ci-dessus, on peut le faire :
Fii::Foo::Bar::Baz myValue = Fii::Foo::Bar::BAZ1 (Works in both C++98 and C++11)
Cependant, j'ai l'impression que :
- A première vue, maValeur semble être initialisé comme un Fii::Foo::Bar mais c'est juste parce que les enum sont un hack pour regrouper des constantes liées dans le parent ( Bar dans ce cas)
Pour améliorer l'état de préparation, j'ai refactorisé le code pour :
namespace Fii
{
class Foo
{
enum Baz
{
BAZ1,
BAZ2,
BAZ3
};
};
};
En utilisant cette nouvelle définition de classe, on peut faire ceci :
Fii::Foo::Baz myValue = Fii::Foo::Baz::BAZ1 (Works in C++11 only)
Fii::Foo::Baz myValue = Fii::Foo::BAZ1 (Should work on C++98 and C++11 - not tested)
Q1) Pourquoi Fii::Foo::Bar::Baz maValeur = Fii::Foo::Baz::BAZ1 ne fonctionne que sur C++11 ?
Q2) En C++98, existe-t-il un moyen d'écrire Fii::Foo::Baz maValeur = Fii::Foo::Baz::BAZ1 ? Vous êtes autorisé à apporter les modifications que vous souhaitez à la définition de la classe.
Environnement : - Compilateur Clang avec support C++11 - Xcode 4 - Mac OS OS 10.8