|
Boost Users : |
From: Alisdair Meredith (yg-boost-users_at_[hidden])
Date: 2002-10-02 14:43:23
I have a std::map<std::string, MyObject> and want to iterate over it
calling several member functions of MyObject. This seems like a good
case to learn about transform/projection iterator, but I am having a
hard time getting a compiling example.
My most recent attempt looks like this:
class MyObject
{
public:
void CommitChanges();
void RollbackChanges();
// More implementation details would follow
};
typedef std::map<std::string, MyObject> MyMap;
typedef MyMap::iterator MyIterator;
typedef MyMap::value_type mapped_type;
typedef boost::projection_iterator_generator< Select2ndRef<mapped_type>,
MyIterator >::type projection;
MyMap theMap;
projection begin( theMap.begin() );
projection end( theMap.begin() );
for_each( begin, end, mem_fun_ref( MyObject::CommitChanges ) );
I also have the following two templates, although I suspect their
equivalent must be lurking in boost somewhere:
template<class pair_type>
struct Select1stRef
{
typedef typename pair_type::first_type & result_type;
result_type operator()( pair_type &source ) const
{
return source.first;
}
};
template<class pair_type>
struct Select2ndRef
{
typedef typename pair_type::second_type & result_type;
result_type operator()( pair_type &source ) const
{
return source.second;
}
};
I am compiling using BCB5 compiler in the IDE, should be equivalent to
the free 5.5.1 command line compiler.
While I could simply write a forwarding functor in a fraction of the
time it will take me to solve this, there is definitely a ne tool I
would like to add to my toolbox here once I understand what is
happenning. Unfortunately I am getting somewhat lost in
reference-to-reference issues, and the occasional compiler crash does
not help.
Any and all hints appreciated
-- AlisdairM
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