"Foo" sınıfında (aşağıda) tanımlanan bir dizi enum değerleri var. Ben de Baz numaralandırma değerleri kapsamını azaltmak için bir yapı kullanıyorumErişim değerleri C++ 98 ve C++ 11
namespace Fii
{
class Foo
{
struct Bar
{
enum Baz
{
BAZ1,
BAZ2,
BAZ3
};
};
};
};
gösterisi gibi ilgili değerlerin bir grup vardır.
Amacım, bir enum türünden bir değişkene bir değer atamaktır. Yukarıdaki sınıf tanımını kullanarak, tek bunu yapabilirsiniz:
İlk bakışta- , MyValue bir Fii :: Foo olarak başlatıldı gibi görünüyor :::
Fii::Foo::Bar::Baz myValue = Fii::Foo::Bar::BAZ1 (Works in both C++98 and C++11)
Ancak, ben hissediyorum Bar ancak bu enum ebeveyn (bu durumda Bar)
Kime grupla ilgili sabitler için kesmek sırf olduğunu daha hazır hale, II kodunu yeniden çarpanlarına: Bu yeni sınıf tanımını kullanarak
namespace Fii
{
class Foo
{
enum Baz
{
BAZ1,
BAZ2,
BAZ3
};
};
};
, tek bunu yapabilirsiniz:
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) Neden Fii :: Foo olduğunu :: Bar: : Baz myValue = Fii :: Foo :: Baz :: BAZ1 sadece C++ 11 üzerinde çalışıyor? C++ 98
Q2) FII :: fan :: Baz MyValue = FII :: fan :: Baz :: BAZ1 yazmak için bir yol var? Sınıf tanımında istediğiniz değişiklikleri yapmaya izin verilir.
Çevre: - Xcode 4 - - Mac OS OS class enums ekleyen 10.8
Bu kod parçasının neden gerekli olduğunu açıklayabilir misiniz? Baz (E e): e_ (e) {} işleç yapısı E() const {return e_; özel: E e_; –
@DavidAndreoletti: Yukarıdaki kodda, Baz bir "kullanıcı tanımlı tür" - nesne örnekleri her biri tek bir E 'değerini yöneten bir sınıftır. Daha sonra sormak istediğiniz kod, sayımlardan birini depolayan kurucu, nesnenin ne zaman bir "Baz" ile ne yapacağını bilmediği bir ifadede nesne göründüğünde örtük olarak bir "E" değeri sağlayan bir işleçtir. E değişkenini saklayan üye değişkeni. Anlaşıldı mı? - Daha fazla açıklama/örnekler için çekinmeyin .... –
Önerinizi denedim ve gayet iyi çalışıyor. Bu yardım kodunun okunabilirliğini ve kodun sürekliliğini engellemediğini düşünüyor musunuz? –