iterator (adaptor) mysteries
In the quest for the simplest iterator adaptor possible I came
up with the idea of simply inheriting from the iterator I'd
like to adapt to, iw with code a la
#include <iostream>
#include <vector>
#include <iterator>
template<typename Iter>
class IteratorAdaptor : public Iter {
public:
IteratorAdaptor(const Iter& it) : it_(it) {}
typename Iter::value_type operator*() { return *it_; }
private:
Iter it_;
};
using namespace std;
int main() {
vector<int> array;
for (size_t i=0; i<10; ++i)
array.push_back(static_cast<int>(i));
IteratorAdaptor<vector<int>::const_iterator> it(array.begin());
IteratorAdaptor<vector<int>::const_iterator> end(array.end());
cout << *it << endl;
++it;
cout << *it << endl;
for (; it != end; ++it)
cout << *it << endl;
return 0;
}
_First_problem_
While this compiles on Vis C++ and on Dinkumware Exam (there even
with the EDG/C++ combination), I do get compile errors on Comeau
Online
"ComeauTest.c", line 6: error: not a class or struct name
class IteratorAdaptor : public Iter
^
detected during instantiation of class
"IteratorAdaptor<Iter> [with Iter=const int *]" at line 24
_Second_problem_
On Vis C++ I do get strange runtime errors in some internal validation
checks in the _Vector_const_iterator::operator++()
_SCL_SECURE_VALIDATE(this->_Mycont != NULL);
So, my question is - what it wrong with inheriting from an iterator
and then using this inherited class as an iterator?
Thanks for any help - I still have no idea where I have left
Standard C++.
Ali
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]