2013-03-16 8 views
5

My użycia klasy wyliczeń (VS2012):statyczne importu C++ 11 (na przykład klasy wyliczenia)

class matrix { 
public: 
    enum class operation_type {ADD, MULT}; 
    matrix(operation_type op); 
... 
} 

i drugiego fragmentu użyć

matrix* m = new matrix(matrix::operation_type::ADD); 

Jeśli nazwy są długie , staje się bardzo brudny.

Czy można jakoś importować wartości enum, abym mógł napisać:

matrix* m = new matrix(ADD); 

Te same pozdrowienia zagnieżdżone klas - Mogę je importować?

Odpowiedz

4

Nie, nie jest to możliwe.

Nie można pominąć operation_type rolę, ponieważ zostały wykonane to na scoped wyliczenie (i to scoped wyliczenia są o). Jeśli chcesz tego uniknąć, musisz uczynić go niezablokowanym enum (usunięcie słowa kluczowego class).

Poza tym, poza matrix, nie można zaimportować nazwy elementu za pomocą deklaracji using tak, jakby matrix był przestrzenią nazw. Co więcej, zgodnie z § 7.3.3/7 normy C++ 11:

Deklaracja użycia nie może wskazywać liczarki o ustalonym zakresie.

+0

masz na myśli, jeśli mam 'class A {public: class B {}}' to nie mogę napisać 'using A :: B', prawda? –

+0

@JoshuaMN: Wierzę, że możesz to zrobić tylko wtedy, gdy napiszesz je w podklasie "A". –

Powiązane problemy