$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Hugh Hoover (hugh_at_[hidden])
Date: 2005-12-03 17:21:52
I have a need to provide STL compliant iterators from an abstract  
class A, that is, without knowing the runtime type of the actual  
"collection" being iterated..  As near as I can tell, these things  
don't mix well.  My best so far is to create an abstract  
"iterator_assister" which provides dereference, (in|de)crement and  
is_equal, and use a boost::iterator_adaptor derived class to provide  
the iterator the client code uses, and allocate the iterator_assister  
derived class from the implementation class (derived from A) that's  
being iterated over.
This solution has obvious downsides.  I can't imagine that this is a  
unique problem.  Certainly, people significantly smarter than me have  
figured out a good solution to this?  In my reading and browsing,  
though, I've never seen the problem presented, never mind solved.  In  
my early C++ days, we used allocated iterators rather than the  
current STL style.
Can anyone provide pointers to what I SHOULD be reading for a good  
solution?
I believe I NEED to use abstract classes here rather than meta- 
programming with known types at runtime - the client code will need  
to iterate over classes loaded from dynamic libraries that are not  
known to the client code (except by abstract interface).
Thanks
Hugh Hoover
Enumclaw Software