Оператор разыменования структуры (оператор ->)

Я пишу тонкую оболочку шаблона для итераторов и натолкнулся на камень преткновения при прохождении через оператор разыменования структуры, главным образом потому, что указатели не ' у меня есть один:

#include 

struct mystruct {
    int member;
};

template
struct wrap {
   typedef typename std::iterator_traits::pointer pointer;
   iterator internal;
   pointer operator->() {return internal.operator->();} //MARK1
};

int main() {
    wrap::iterator> a;
    a->member;
    wrap b;
    b->member;
    return 0;
}

http://ideone.com/XdvEz

prog.cpp: In member function ‘typename std::iterator_traits<_Iter>::pointer wrap::operator->() [with iterator = mystruct*]’:
prog.cpp:18:   instantiated from here
prog.cpp:11: error: request for member ‘operator->’ in ‘((wrap*)this)->wrap::internal’, which is of non-class type ‘mystruct*’

Следующий метод работает, но я не думаю, что он сработает гарантированно. А именно, если итератор имеет странный тип указателя , который не совпадает с указателем на value_type .

   pointer operator->() {return &*internal;} //MARK3

9
задан Mooing Duck 16 December 2011 в 19:54
поделиться