Hi,

I'm currently embedding and extending Python using Boost.Python. I'm trying to expose some c++ library (OIS) classes to my Python scripts. This library mainly exposes abstract classes since the actual implementation are derived classes specialized for each operating system.

So, i have to wrap those abstract classes. Then, eventually i will convert some existing C++ object of this class to its Python equivalent. Ideally, I would think that the HeldType is a pointer to the existing C++ object. There is no pointer managment problem since the lifetime of the object is greater than the execution time of the script.

There is probably something i don't understand in the design of Boost.Python. At this point, my problem is that i need a to_python conversion which requires the abscence of noncopyable attribute which then implies to be able to build an instance of the object (which i cannot provide since the class is abstract, and i don't have any concrete derived class). I don't yet understand why holding a pointer in the Python object requires the ability to build instances of the wrapped class. The exact compile-time error i get is:

boost_1_44/boost/python/object/pointer_holder.hpp:194:14: error: cannot allocate an object of abstract type 'OIS::Keyboard'

I'm using boost 1.44 (required by some other library) Python 3.2 and MinGW/Msys. Module declaration:

BOOST_PYTHON_MODULE(OIS)
{
        class_<Keyboard, Keyboard*>("Keyboard", no_init);
}

Python init:

try {
        PyImport_AppendInittab("OIS", PyInit_OIS);
        Py_InitializeEx(0);

        object main(import("__main__"));
        dict globals(main.attr("__dict__"));
        globals["keyboard"] = ptr(keyboard);
}
catch (error_already_set&) {
        PyErr_Print();
}

Did i choose the wrong desing ? Did i do something wrong ? What should i do to solve this problem ?


Valentin Perrelle.
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to