Yineleyicinin argüman olarak fnc'ye geçip geçmediğini kontrol etmenin bir yolu var mı reverse_iterator? Kullanabileceğim herhangi bir yineleyici özellik fonksiyonu var mı?Yineleyicinin türü reverse_iterator olup olmadığını kontrol edin
cevap
Bu kısmi uzmanlaşma ile yazmaya Önemsiz: aşağıda işaret rağmen
#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 { };
, bu bir "ters-ters" yineleyici (IMHO olası) davayı işlemez. Bathsheba'nın cevabındaki biraz daha az önemsiz versiyon bu durumu doğru olarak ele alıyor.
Bu, "std :: reverse_iterator
Muhtemelen iki cevap, bu zor davayla farklı şeyler yapar. Neden bir "reverse_iterator" olup olmadığını bilmek istediğinize bağlı olarak, bir çift ters yineleyiciye bir tane olarak davranmak isteyebilirsiniz (çünkü bu aslında 'reverse_iterator' ın bir örneği olan bir türdendir) veya tek bir (çünkü "ileriye doğru", çünkü bağlamda ne anlama gelirse). –
I üretiminde kullanımı bazı kod:
#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. Teşekkürler. Benim gibi bir yeni başlayan için std kütüphanesinden birkaç yeni şey. Std :: integral_constant', std :: false_type' – ubuntugod
"Üretimde kullandığım bazı kodlar" - asla kullanım durumunuz nedir? Marc Glisse gibi, neden bunu yapmak istediğini göremiyorum. – user2357112
indeeds vardır [ 'std :: iterator_traits'] (http://en.cppreference.com/w/cpp/iterator/iterator_traits) olabilir kullanmak mümkün. –
Merak etme, neden bunu yapmak istersiniz? İyi bir kullanım vakasıyla gelmekte zorlanıyorum. –