"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