"Johan Nilsson" <[EMAIL PROTECTED]> writes:

> "David Abrahams" <[EMAIL PROTECTED]> wrote in message
>
>> A rather lengthy example with no comments or explanatory text
>> describing what it's supposed to be accomplishing is not very easy to
>> analyze.  If you want feedback from the group, it would be polite to
>> describe what you're trying to do.
>>
>
> I certainly wasn't being intentionally rude; apologies to anyone
> offended by my posting.

Your posting wasn't exactly rude; it just asked for a lot more than it
probably should from your readers.

> I just wanted to get some feedback on what I tried, and currently consider
> the stuff as a hack. But, as the functionality would be extremely helpful
> for object factories, I thought I might as well post the code and get some
> comments about it. The hack makes no 'fixed' assumptions on binary object
> layout, rather, it relies on the fact that any polymorphic type can be
> queried for an implemented interface (aka 'base class'). It does, however,
> make the assumption that the location of the rtti itself data is fixed for a
> specific c++ implementation across different polymorphic types.

The quibble I have with all this, which you _still_ haven't satisfied,
is that you never said in simple terms what you're trying to
accomplish. A sentence as simple as, "I'm trying to dynamic cast from
an arbitrary void* to and arbitrary polymorphic object type" would
have sufficed. I came to this explanation after looking at your code
below again, and I'm still not sure that's what you're trying to do.

Incidentally, shared_ptr<void> may allow you the kind of type erasure
you want. Just a thought...

>
> Sample usage (demonstrating syntax only):
> --------------
>
> void foo(void*)
> {
>     try
>     {
>         IMyBaseClass* pmc = dynamic_void_cast<IMyClass>(pv);
>
>         if (pmc)
>        {
>             pmc-MyFn();
>         }
>     }
>     catch (std::exception&)
>     {}
> }
>
>
> The hack:
> ------
> template<typename T>
> T* dynamic_void_cast(void* pv)
> {
>   struct rtti_obj__
>   {
>     virtual ~rtti_obj__() = 0;
>   };
>
>   rtti_obj__* pro = static_cast<rtti_obj__*>(pv);
>
>   try
>   {
>     return dynamic_cast<T*>(pro);
>   }
>   catch (bad_cast&)
>   {
>     throw;
>   }
>   catch (exception& e)
>   {
>     throw bad_cast(e.what());
>   }
> }
>
> ----------
>
> I'll put together a sample showing some more concrete usage, this is more
> something of an apologetic sample ;-)
>
> // Johan
>
>
>
>
>
> _______________________________________________
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
>

-- 
                       David Abrahams
   [EMAIL PROTECTED] * http://www.boost-consulting.com
Boost support, enhancements, training, and commercial distribution

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to