В конце я это сделал.
Я создал экземпляр класса в моем модуле Boost Python следующим образом:
class_<Radish>("Radish");
Я создал функцию конвертера следующим образом:
static void* radishConvert(PyObject* obj)
{
char thisStr[] = "this";
//first we need to get the this attribute from the Python Object
if (!PyObject_HasAttrString(obj, thisStr))
return NULL;
PyObject* thisAttr = PyObject_GetAttrString(obj, thisStr);
if (thisAttr == NULL)
return NULL;
//This Python Object is a SWIG Wrapper and contains our pointer
void* pointer = ((PySwigObject*)thisAttr)->ptr;
Py_DECREF(thisAttr);
return pointer;
}
Где PySwigObject является структурой, подобной этой:
struct PySwigObject
{
PyObject_HEAD
void * ptr;
const char * desc;
};
Последнее, я зарегистрировал свой конвертер:
boost::python::converter::registry::insert(&radishConvert, type_id<Radish>());
Это отлично работает, я могу получить объекты из SWIG и передать их в boost :: python. Обратный процесс все еще не решен, но для меня достаточно.
Это руководство, которое я использовал, чтобы найти решение:
http://wiki.python.org/moin/boost.python/HowTo#SWIG_exposed_C.2B-.2B-_object_from_Python