我是Cython的新手。我正在尝试为以下C ++代码示例的Python创建Cython包装器。下面的示例只是一个模拟的示例,它说明了我在项目中正在做的事情以及遇到的问题。
C ++类
A.h
class A {
public:
A();
B * newB(){
return new B(this, "");
}
};
B.h
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 *'