|
Boost : |
From: Peter Dimov (pdimov_at_[hidden])
Date: 2001-07-24 15:24:02
From: "Greg Colvin" <gcolvin_at_[hidden]>
[...]
> template<typename BasePtr, typename DerivedPtr>
> DerivedPtr whatever(BasePtr in) {
> ...
> DerivedPtr p = do_dynamic_cast<DerivedPtr>(in);
> ...
> return p;
> }
Or something like
template<class Ptr> void whatever(Ptr p)
{
if(IDrawable q = do_dynamic_cast<IDrawable>(p)) q->draw();
}
where IDrawable is typedef'ed somewhere to be, say, shared_ptr<Drawable>.
(As an aside, people like to implement their own COM-like component systems;
it would be great if shared_ptr<> can be used for this. The two main
obstacles are (1) no 'queryInterface' support - this would hopefully be
addressed by do_dynamic_cast - and (2) a shared_ptr<> created in a DLL and
destroyed in the main program causes problems when different heaps are
used.)
Still, I prefer that shared_dynamic_cast<> be left as an option. More
focused (less generic) interfaces are less error prone, when genericity is
not required.
-- Peter Dimov Multi Media Ltd.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk