Ho un insieme di valori enum definiti nella classe "Foo" (sotto).Valori di enum di accesso in C++ 98 e C++ 11
namespace Fii
{
class Foo
{
struct Bar
{
enum Baz
{
BAZ1,
BAZ2,
BAZ3
};
};
};
};
Sto usando una struct per ridurre l'ambito di valori enum Baz così come dimostrano ci sono un gruppo di valori correlati.
Il mio obiettivo è assegnare un valore da un tipo di enum a una variabile. Utilizzando la definizione della classe di cui sopra, si può fare questo:
Fii::Foo::Bar::Baz myValue = Fii::Foo::Bar::BAZ1 (Works in both C++98 and C++11)
Tuttavia, ritengo che:
- A prima vista, myValue sembra essere inizializzato come Fii :: :: Foo Bar ma questo è solo perché enum sono un trucco per le costanti correlate del Gruppo nel genitore (Bar in questo caso)
per migliorare la prontezza, II ri-scomposto il codice per:
namespace Fii
{
class Foo
{
enum Baz
{
BAZ1,
BAZ2,
BAZ3
};
};
};
Utilizzando questa nuova definizione di classe, si può fare questo:
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) Perché è Fii :: Pippo :: Pluto: : Baz myValue = Fii :: Foo :: Baz :: BAZ1 funziona solo su C++ 11?
Q2) In C++ 98, c'è un modo per scrivere Fii :: Foo :: Baz myValue = Fii :: Foo :: Baz :: BAZ1? Puoi apportare le modifiche che ti piacciono nella definizione della classe.
Ambiente: - compilatore Clang con C++ 11 supporto - Xcode 4 - Mac OS OS 10.8
Puoi spiegare perché è necessario questo codice? Baz (E e): e_ (e) {} operatore const E() const {return e_; } private: E e_; –
@DavidAndreoletti: nel codice sopra, Baz è un "tipo definito dall'utente" - una classe le cui istanze di oggetto gestiscono ciascuna un singolo valore 'E'. Il codice richiesto è il costruttore che memorizza una delle enumerazioni, un operatore che fornisce implicitamente un valore 'E' ogni volta che l'oggetto appare in un'espressione in cui il compilatore non sa cosa fare con un' Baz', e il variabile membro che memorizza 'E'. È chiaro? - sentiti libero di chiedere ulteriori chiarimenti/esempi .... –
Ho provato il tuo suggerimento e funziona bene. Pensi che questa leggibilità del codice di aiuto e non ostacoli la manutenibilità del codice? –