The code I'm trying to wrap doesn't rely on RTTI, that's why there are no virtual functions. (I agree that RTTI would be better from about any point of view, but this piece of software isn't using it)
There should be no need of dynamic_cast or any kind of run time type checking since the program has got static knowledge of types: look at the function derived2() in the example I showed: it statically returns a boost::shared_ptr<Derived>. Don't know how shared_ptr support is implemented, guess it's not trivial... However managed to get around the problem with a simple hack: prior to pass a shared_ptr to Python for the first time, I just pass it to Python casted to its most-derived class. On Sun, Mar 21, 2010 at 10:28 PM, Nat Goodspeed <n...@lindenlab.com> wrote: > peoro wrote: > >> Ok, it does work as expected if class Base has got at least one virtual >> member: >> >> ...What if I cannot add a virtual function to the class Base? > > If your C++ base class has no virtual methods, even pure C++ can't > dynamic_cast<> it. > > Put differently -- you've been asking Python to determine the runtime type > of a class for which C++ maintains no runtime type. It's the presence of at > least one virtual method that forces C++ to start tracking the runtime type > of a class hierarchy. > _______________________________________________ > Cplusplus-sig mailing list > Cplusplus-sig@python.org > http://mail.python.org/mailman/listinfo/cplusplus-sig > _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig