yapı KQUEUE operatörü geçerken işaretçiler yok başlıca çünkü yineleyiciler için ince bir şablon sarıcı yazma ve bir engel isabet am tek:Yapısı KQUEUE operatörü (operatöre>)
#include <vector>
struct mystruct {
int member;
};
template<class iterator>
struct wrap {
typedef typename std::iterator_traits<iterator>::pointer pointer;
iterator internal;
pointer operator->() {return internal.operator->();} //MARK1
};
int main() {
wrap<std::vector<mystruct>::iterator> a;
a->member;
wrap<mystruct*> b;
b->member;
return 0;
}
prog.cpp: In member function ‘typename std::iterator_traits<_Iter>::pointer wrap<iterator>::operator->() [with iterator = mystruct*]’:
prog.cpp:18: instantiated from here
prog.cpp:11: error: request for member ‘operator->’ in ‘((wrap<mystruct*>*)this)->wrap<mystruct*>::internal’, which is of non-class type ‘mystruct*’
Bu aşağıdaki yöntem çalışır, ama çalışması garanti sanmıyorum. Yani, bir yineleyici, value_type
işaretçisiyle aynı olmayan garip bir pointer
türüne sahipse.
pointer operator->() {return &*internal;} //MARK3
C++ hangi sürümü * a * yapısı KQUEUE operatörü sahiptir? –
Neden char * '? Bir yerde bir çeşit “Iterator :: value_type” olmaz mıydı? –
@ThomasMatthews: İşte bu [wikipedia] (http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Member_and_pointer_operators) buna diyor. C++ standardı sadece “operatör->” diyor. –