>From: "Johan Nilsson" <[EMAIL PROTECTED]>
> 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. > > 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()); > } > } > > ---------- Why do you catch, and just rethrow exceptions? Why not just let them propagate (no try/catch), or turning them into return zero? Also, what other exception, besides bad_cast, can dynamic_cast throw, which necessitates the second catch clause? Regards, Terje _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost