Boost logo

Boost Users :

From: Alan M. Carroll (amc_at_[hidden])
Date: 2005-10-04 22:18:32


Create a hash_map, keyed by typeid(), that returns the appropriate function/method/functor. In effect, you'd be doing your own virtual function lookup but if you can't modify the base class, that's probably the best you can do.

At 07:18 PM 10/4/2005, you wrote:
>Darn. I meant to put that in the message. Isn't email supposed to be psychic?
>
>I can't change the base class, hence the problem. It's a very wide
>hierarchy for a framework that I can't change.
>
>Thanks for the suggestion, though.
>
> ...Duane
>
>--- At Tue, 4 Oct 2005 14:47:29 -0700, Sohail Somani wrote:
>
>>Is there some trouble with defining:
>>
>>class Base
>>{
>> virtual void some_function() = 0;
>>};
>>
>>???
>>
>>I can understand the void f() entry point for C callbacks but you can
>>use C++ to do the work for you. Unless I'm missing something.
>>
>>> -----Original Message-----
>>> From: boost-users-bounces_at_[hidden]
>>> [mailto:boost-users-bounces_at_[hidden]] On Behalf Of Duane Murphy
>>> Sent: Tuesday, October 04, 2005 2:38 PM
>>> To: Boost Users
>>> Subject: [Boost-users] Type List Iteration?
>>>
>>>
>>> How do I iterate over a type list and call a function? MPL?
>>>
>>> I have a base class BASE that has several subclasses A, B, C
>>> that have special capabilities, but no way to identify those
>>> capabilities aside from the type.
>>>
>>> I would like to determine if an object of type BASE is also
>>> of one of the special subclasses:
>>>
>>> ie
>>> void f( BASE* base)
>>> {
>>> if ( dynamic_cast< A* >( base ) != NULL )
>>> {
>>> some_function( dynamic_cast< A* >( base ) );
>>> }
>>> else if ( dynamic_cast< B* >( base ) != NULL )
>>> {
>>> some_function( dynamic_cast< B* >( base ) );
>>> }
>>> else if ( dynamic_cast< C* >( base ) != NULL )
>>> {
>>> some_function( dynamic_cast< C* >( base ) );
>>> }
>>> }
>>>
>>> I think you can see why I'd like a type list iterator
>>> solution to this.
>>>
>>> I have arranged for the some_function to be a template as
>>> well to make things easier.
>>>
>>> What I am looking for is the equivalent of find_if() but for
>>> types and done at run time. I looked over MPL, but MPL seems
>>> to apply at compile time without a door to the run time world. :-)
>>>
>>> Thanks for your helpful tips!
>
> ...Duane
>
>_______________________________________________
>Boost-users mailing list
>Boost-users_at_[hidden]
>http://lists.boost.org/mailman/listinfo.cgi/boost-users


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