[EMAIL PROTECTED] wrote: > Chris Lambacher wrote: > > On Thu, Dec 14, 2006 at 01:57:10PM -0800, [EMAIL PROTECTED] wrote: > > > Hi, > > > I'm having problems wrapping a hierarchy of classes, actually having > > > problems wrapping the base class. I don't need to use the WrapClass > > > mechanism since I don't want to override classes in Python. My code > > > boils down to: > > > > > > class Base > > > { > > > public: > > > virtual ~Base() > > > {} > > > > > > virtual void f() = 0; > > > }; > > > > > > class Derived : > > > public Base > > > { > > > public: > > > virtual void f() > > > {} > > > > > > void g() > > > {} > > > }; > > > > > > int main() > > > { > > > boost::python::class_<Base> class_base("Base"); > > Why are you trying to make this type visible to python? It is pure virtual, > > you can never instantiate it. > > Because I want to use subclasses of Base polymorphically from Python. > Python will receive an instance of some Base subclass through a another > exported function.
I don't know much about Boost. Does it have anything like boost::python::pointer_<Base>? You can't get polymorphism by direct access to a class. C++ compiler always knows the exact type of a direct, non-pointer-accessed object. So even if you could create a class_<Base>, it would only ever be a Base, and never a derived class. You have to use pointers to get polymorphism. As an alternative, consider wrapping the derived classes instead. It might not be much more work if Boost wraps everything nicely. Carl Banks -- http://mail.python.org/mailman/listinfo/python-list