Hi All,
I'm trying to do some slightly hooky stuff with the iterators library and
cannot get the following code to compile.
When the second last line of main is uncommented ("ZIter iter(b);"),
compilation fails.
The error mesages suggest this is a problem with determining the
appropriate traversal category of "ZIter".
Can anyone advise if this is problem with my code, a bug, am I asking too
much of the library, ...?
Cheers,
Simon Knapp.
compiler:
Visual Studio 2008 - version 9.0.30729.1 SP
//----------------------------------------------------------------------------------------------------------------------------
// begin iterator_tests.cpp
//----------------------------------------------------------------------------------------------------------------------------
#include <vector>
#include
#include
#include
typedef std::vector<long long> LLGrid;
typedef std::vector<float> FloatGrid;
typedef LLGrid::const_iterator LLGridIter;
typedef FloatGrid::const_iterator FloatGridIter;
typedef boost::tuples::tuple IDAndAreaTuple;
typedef boost::zip_iterator<IDAndAreaTuple> IDAndAreaIterator;
typedef std::iterator_traits<IDAndAreaIterator>::reference IDAndAreaRef;
struct Fnctr {
bool operator()(const IDAndAreaRef ref) const {
return true;
}
};
typedef boost::filter_iterator FIter;
typedef boost::tuples::tuple ZIterTuple;
typedef boost::zip_iterator<ZIterTuple> ZIter;
static ZIterTuple makeZIterTuple(
Fnctr const& fnctr,
LLGridIter const& beginIdGrid,
LLGridIter const& endIdGrid,
FloatGridIter const& beginAreaGrid,
FloatGridIter const& endAreaGrid,
FloatGridIter const& gtgdIter
) {
return
boost::make_tuple(
gtgdIter,
boost::make_filter_iterator(
fnctr,
boost::make_zip_iterator(boost::make_tuple(beginIdGrid,
beginAreaGrid)),
boost::make_zip_iterator(boost::make_tuple(endIdGrid,
endAreaGrid))
)
);
}
int main(int argc, char* argv[]) {
FloatGrid areaMask, regionStat;
LLGrid regionMask;
ZIterTuple b(makeZIterTuple(Fnctr(), regionMask.begin(),
regionMask.end(), areaMask.begin(), areaMask.end(), regionStat.begin()));
//ZIter iter(b);
return 0;
}
//----------------------------------------------------------------------------------------------------------------------------
// end iterator_tests.cpp
//----------------------------------------------------------------------------------------------------------------------------