Czy istnieje sposób sprawdzenia, czy iterator przekazał jako argument do fnc to reverse_itator? Czy mogę użyć funkcji funkcji iteratora?Sprawdź, czy typem iteratora jest reverse_iterator
Odpowiedz
To trywialne napisać o częściowej specjalizacji:
#include <iterator>
#include <type_traits>
template<typename Iter>
struct is_reverse_iterator
: std::false_type { };
template<typename Iter>
struct is_reverse_iterator<std::reverse_iterator<Iter>>
: std::true_type { };
Chociaż jak wskazano poniżej, to nie obsługiwać (IMHO mało prawdopodobne) przypadku „reverse-reverse” iterator. Ta nieco mniej trywialna wersja w odpowiedzi Bathsheby poprawnie obsługuje ten przypadek.
Nie obsłuży to 'std :: reverse_iterator
Prawdopodobnie te dwie odpowiedzi robią użytecznie różne rzeczy w tym trudnym przypadku. Zależnie od tego, dlaczego chcesz się dowiedzieć, czy jest to "reverse_iterator", możesz potraktować iterator z podwójną ścieżką jako jeden (ponieważ jest to typ będący instancją 'reverse_iterator') lub jako nie będący jednym (ponieważ iteruje "naprzód", cokolwiek to znaczy w kontekście). –
Niektóre kod używam w produkcji:
#include <iterator>
#include <type_traits>
template<typename I>
struct is_reverse_iterator : std::false_type
{
};
template<typename I>
struct is_reverse_iterator<std::reverse_iterator<I>>
: std::integral_constant<bool, !is_reverse_iterator<I>::value>
{
};
+1. Dzięki. Kilka nowych rzeczy ze std library dla nowicjuszy takich jak ja. Nigdy nie wiedziałem o 'std :: integral_constant',' std :: false_type' – ubuntugod
"Jakiś kod, którego używam w produkcji" - jaki jest twój przypadek użycia? Podobnie jak Marc Glisse, nie rozumiem, dlaczego chciałbyś to zrobić. – user2357112
- 1. Używaj zwykłego iteratora do iteracji wstecznej lub zmagań z reverse_iterator?
- 2. Czy obiekt jest typem odniesienia lub typem wartości?
- 3. Operator! = Jest niejednoznaczny dla std :: reverse_iterator C++
- 4. Sprawdź, czy jest fałsz.
- 5. Czy bool jest rodzimym typem C?
- 6. Czy Java 8 jest bezpiecznym typem zwrotnym?
- 7. Jak ustalić, czy typ jest typem kolekcji?
- 8. Sprawdź, czy obiekt jest pusty
- 9. Sprawdź, czy przeglądarka jest zajęta
- 10. Sprawdź, czy typ jest słownik
- 11. Sprawdź, czy program jest zainstalowany
- 12. Sprawdź, czy plik jest pusty
- 13. Sprawdź, czy dotknięte jest UIView?
- 14. Sprawdź, czy NSDictionary jest pusty
- 15. Sprawdź, czy UIWebView jest ładowany
- 16. Sprawdź, czy NSMutableDictionary jest pusty?
- 17. Czy plik jest pusty sprawdź
- 18. Sprawdź, czy pakiet jest zainstalowany.
- 19. Sprawdź, czy katalog jest pusty
- 20. Sprawdź, czy mongoDB jest podłączony
- 21. Sprawdź, czy NumericUpDown jest pusty
- 22. Sprawdź, czy element jest obecny.
- 23. Sprawdź, czy intencja jest dostępna.
- 24. Sprawdź, czy Skype jest zainstalowany
- 25. Sprawdź, czy plik jest otwarty.
- 26. Sprawdź, czy zmienna jest tablicą
- 27. Sprawdź, czy wyrażenie jest funkcją?
- 28. Sprawdź, czy NSNumber jest frakcją
- 29. Sprawdź, czy RecyclerView jest przewijane
- 30. Sprawdź, czy alert jest wyłączony.
Istnieją indeeds [ 'std :: iterator_traits'] (http://en.cppreference.com/w/cpp/iterator/iterator_traits), które mogą być możliwe do użycia. –
Z ciekawości, dlaczego miałbyś to zrobić? Trudno wymyślić dobry przypadek użycia. –