[C++-sig] Re: Doubts with wrapping/using abstract bases.

Raoul Gough RaoulGough at yahoo.co.uk
Sun Aug 10 21:28:50 CEST 2003

Prabhu Ramachandran <prabhu at aero.iitm.ernet.in> writes:

> Hi,
> I think I have a fairly serious misunderstanding of how Boost.Python
> wraps abstract virtual classes.  I'd appreciate any clarifications.
> Here is a simple example:
> // ---------------- holder.hpp ----------------------
> #include <vector>
> #include <iostream>
> struct A {
>     virtual ~A() {}
>     virtual void f()=0;
> };
> {
>     class_< A, boost::noncopyable, std::auto_ptr< A_Wrapper > >
>     ("A", init<  >());

Here's the problem - the Python reflection of class "A" does not
include the function f at all. You would need to get something like

class_< A, boost::noncopyable, std::auto_ptr< A_Wrapper > >
  ("A", init<  >())
  .def ("f", &A::f);

for the code to work. Not sure how to get pyste to do that though.

> Traceback (most recent call last):
>   File "<stdin>", line 1, in ?
> AttributeError: 'A' object has no attribute 'f'
> I did not expect this since this is perfectly legal in C++,
> i.e. b1->f() in C++ is legal and used commonly.  So what am I doing
> wrong?

How about adding the extra "def" manually to see whether it fixes the
problem? Sorry I can't help on the Pyste side of this. Mayeb some
semi-relevant stuff by Googling for pyste pure virtual.

Raoul Gough
"Let there be one measure for wine throughout our kingdom, and one
measure for ale, and one measure for corn" - Magna Carta

More information about the Cplusplus-sig mailing list