Я новичок в Cython.Я пытаюсь создать оболочку Cython для Python из следующего примера кода C ++.Приведенный ниже пример является всего лишь макетом, иллюстрирующим то, что я делаю в своем проекте, и проблему, с которой я сталкиваюсь.
C ++ class
Ah
class A {
public:
A();
B * newB(){
return new B(this, "");
}
};
Bh
class B {
public:
B(A * a, const char * cwd);
};
В Cython:
файл classes.pxd:
cdef extern from "A.h":
cdef cppclass A:
A() except +
B * newB()
// Both classes in same .pxd file
cdef extern from "B.h":
файл classes.pyx:
cimport classes
from libcpp cimport bool
cdef class PyA:
cdef classes.A *thisptr
def __cinit__(self):
self.thisptr = new classes.A()
def newB(self):
cdef PyB val = PyB()
val.thisxptr = classes.newB()
return val
cdef class PyB:
cdef classes.B *thisxptr
def __cinit__(self):
self.thisxptr = NULL
def __dealloc__(self):
if self.thisxptr != NULL:
del self.thisxptr
В сводном классе B
должен быть создан с помощью метода newB()
в классе A
, главным образом потому, что класс A
определенных ключевых свойств и ресурсов, которые понадобятся классу B
.Но я получаю следующую ошибку:
Невозможно преобразовать объект Python в 'B *'