如何在Cython中返回C ++包装的对象

时间:2019-04-18 10:05:08

标签: python cython

我是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 *'

0 个答案:

没有答案