W jaki sposób należy zapętlić klasy enum w C++ 11? Mam nadzieję, że nadal nie muszę dodawać ostatecznej wartości wyliczeniowej END, ale nie mogłem również uruchomić pętli opartych na zasięgu.W jaki sposób należy zapętlić klasy enum w C++ 11?
Odpowiedz
Jeśli naprawdę potrzebujesz pętli nad klasą wyliczania i chcesz uniknąć dodawania specjalnego symbolu END, możesz zdefiniować własne cechy do tego celu.
template<typename E> struct EnumTraits;
enum class E { V1, V2, V3 };
enum class F { X1, X2, X3 };
template<> struct EnumTraits<E> { static constexpr E LAST = E::V3; };
template<> struct EnumTraits<F> { static constexpr F LAST = F::X3; };
Następnie można napisać na przykład:
EnumTraits<E>::LAST
dostać „ostateczną” wartość E. Oczywiście trzeba jeszcze zdefiniować operacje arytmetyczne w tej klasie.
Oczywiście zakłada się, że wyliczenie rozpoczyna się od 0 i nie pomija żadnych pośrednich wartości. –
@KevinBallard: ... Które jest mało prawdopodobne w wielu, wielu okolicznościach. –
@EdS .: Zależy od celu enum –
Można zrobić procesor Hack tak:
#define E_INITIALIZER_LIST { E1, E2, E3, E4 }
enum E E_INITIALIZER_LIST;
constexpr E ALL_VALUES_OF_E[] E_INITIALIZER_LIST;
Lista jest nieco bardziej elastyczna, jeśli pominięto nawiasy klamrowe z makra. Następnie możesz również dodać "SENTINEL_VALUE", zamiast tego umieść listę w nawiasach okrągłych itp. – Potatoswatter
- 1. C#: W jaki sposób należy zaimplementować ToString()?
- 2. W jaki sposób Enum przydziela pamięć na C?
- 3. Jaki jest najlepszy sposób analizowania czasu milisekundy w C++ 11
- 4. Jaki jest zalecany sposób iterowania kontenera w C++ 11?
- 5. Jak mogę wyprowadzić wartość klasy wyliczeniowej w C++ 11
- 6. W jaki sposób należy rozmieścić NSTableCellViews?
- 7. W jaki sposób należy użyć tf.summary.tensor_summary?
- 8. wirtualnej klasy bazowej wywołuje pusty konstruktor w C++ (C++ 11)
- 9. W jaki sposób należy łańcuch konstruktorów w hierarchii klas?
- 10. Jak zapętlić nazwy pól klasy
- 11. Dlaczego C++ 11 nie obsługuje wyszukiwania nazw w ten sposób?
- 12. Jak używać enum w C
- 13. Czy ten wzorzec jest prawidłowy dla migracji wstecznej z C++ 03 do klasy enum C++ 11?
- 14. C++ 11 Inicjowanie klasy tablicy stałej statycznej
- 15. Dosłowne Rodzaj Klasy w C++ 11/C++ 14
- 16. W Pythonie, w jaki sposób mogę zapętlić wszystkie dopasowania wyrażenia regularnego na ciągu znaków?
- 17. Inkrementacja i dekrementacja "klasy enum"
- 18. Bezpieczny sposób konwertowania liczby całkowitej w enum
- 19. W jaki sposób uczynićMouseLeave w React, należy uwzględnić kontekst podrzędny?
- 20. C# Enum w bibliotece C++
- 21. Rozszerzanie Enum w C#
- 22. C-jak enum w Javie
- 23. C#: Dostęp do Enum z innej klasy
- 24. User Defined C++ 11 klasa enum Domyślny konstruktor
- 25. W jaki sposób Python zapobiega podklasie klasy?
- 26. W jaki sposób DexGuard szyfruje klasy?
- 27. C++ 11 lambda w decltype
- 28. statyczne importu C++ 11 (na przykład klasy wyliczenia)
- 29. Wyznaczenie klasy enum
- 30. Sposób C++ 11 budowy pętli zdarzeń
'enum' nie jest kontenerem - to nie ma sensu„pętla”nad nim, IMHO. W każdym razie zobacz część arytmetyczną [tutaj] (https://bitbucket.org/martinhofernandes/wheels/src/c8e1b8979492/include/wheels/enums.h%2B%2B), aby uzyskać przykładowy kod, którego możesz użyć. – Xeo