Boost logo

Boost Users :

From: Rene Rivera (grafik.list_at_[hidden])
Date: 2005-12-15 10:57:09


Stephen Gross wrote:
> In the following snippet, I've got a simple inherited system (base and
> derived). I create a boost::any and assign it a derived instance. Then I try
> to any_cast it to the base. It compiles, but at runtime it segfaults. Is
> this expected behavior?

Given your example, yes it's expected. The "any_cast<base>(&a)" returns
NULL and dies when it tries to dereference that NULL.

> Is there a way to make this work?

Not with value based objects in the boost::any. But you can store
managed objects instead. For example:

====
void test1()
{
   boost::shared_ptr<foo1> f(new foo1);
   boost::any a = boost::static_pointer_cast<base>(f);
   f = boost::dynamic_pointer_cast<foo1>(
     boost::any_cast< boost::shared_ptr<base> >(a));
   if (f) f->go();
}
====

-- 
-- Grafik - Don't Assume Anything
-- Redshift Software, Inc. - http://redshift-software.com
-- rrivera/acm.org - grafik/redshift-software.com
-- 102708583/icq - grafikrobot/aim - Grafik/jabber.org

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