|
Boost Users : |
Subject: [Boost-users] Pushing iterators to far?
From: Simon Knapp (sleepingwell_at_[hidden])
Date: 2013-01-10 05:07:37
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 <boost/iterator/filter_iterator.hpp>
#include <boost/iterator/zip_iterator.hpp>
#include <boost/tuple/tuple.hpp>
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<LLGridIter, FloatGridIter> 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<Fnctr, IDAndAreaIterator> FIter;
typedef boost::tuples::tuple<FloatGridIter, FIter> 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
//----------------------------------------------------------------------------------------------------------------------------
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net