9
我寫迭代器薄模板包裝,並創下絆腳石通過結構引用操作時,主要是因爲指針沒有一個:結構引用操作(操作符 - >)
#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*’
下面的方法有效,但我不認爲這是保證工作。也就是說,如果迭代器有一個奇怪的pointer
類型,它與指向value_type
的指針不同。
pointer operator->() {return &*internal;} //MARK3
什麼版本的C++的具有*結構引用操作*? – 2011-12-16 19:14:53
爲什麼char *`?在某處不會有某種`Iterator :: value_type`嗎? – 2011-12-16 19:25:11