Boost logo

Boost Users :

From: David Abrahams (dave_at_[hidden])
Date: 2005-10-05 08:50:54


Aleksey Gurtovoy <agurtovoy_at_[hidden]> writes:

>> I think you can see why I'd like a type list iterator solution to this.
>
> Try this:
>
> struct do_something
> {
> do_something( BASE* base ) : m_base( base ) {}
>
> template< typename T > void operator()( mpl::identity<T> ) const
> {
> if ( T* x = dynamic_cast< T* >( this->m_base ) )
> some_function( x );
> }
>
> BASE* m_base;
> };
>
> mpl::for_each<
> mpl::vector<A,B,C>
> , mpl::make_identity<_1>
> >( do_something( base ) );
>

In this case you test for all the derived types, even if you match the
first one, so it's not identical. It would probably be nice of us to
create a for_each_if() or until() function that stops when the
function object returns true. I'm pretty sure I've needed something
like that before... Oh yeah, the FSM example could probably benefit
from it! A lot!

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

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