[C++-sig] pure class, to expose or not to expose?

Mihail Konstantinov kmihail at rocketmail.com
Wed Dec 3 11:03:42 CET 2008


Hello,
I need help again.

In the example below I either get the error message during compilation:
> ...
>/home/mihail/temporary/boost_1_37_0/boost/python/object/value_holder.hpp:66: error: cannot declare field 
>‘boost::python::objects::value_holder<A0>::m_held’ to be of abstract type ‘A0’
>boost.cpp:5: note:   because the following virtual functions are pure within ‘A0’:
>boost.cpp:7: note:     virtual void A0::pure()

or, if I don't expose class A0 (as it is currently commented out), when importing the module in python:
> <type 'exceptions.RuntimeError'>: extension class wrapper for base class A0 has not been created yet

How can I fix the problem? I don't need to expose A0, well, exposing pure classes doesn't make sense anyway, does it?
But I need to be able to call in python boost_ext.B(boost_ext.A()), so that I think I have to declare the A0<-A inheritance relationship somehow.

Thank you
Mihail

boost.cpp:

// A is a concrete implementation of the abstract class A0.
// the constructor of B<T> takes the abstract class A0
class A0{
public:
  virtual void pure()=0;
  virtual ~A0(){};
};

class A: public A0{
public:
  void pure(){};
  ~A(){};
};

template<class T> class B{
  T value;
public:
  B(const A0&){};
};

typedef B<double> Lumi;

BOOST_PYTHON_MODULE(boost_ext)
{
    using namespace boost::python;
    //class_<A0>("A0");
    class_<A,bases<A0> >("A");
    class_<Lumi>("Lumi",init<const A0&>());
}



      



More information about the Cplusplus-sig mailing list