1
私は2つのクラスを持っています(最も単純なものを想定しましょう、実装は重要ではありません)。 (cythonのDEFSと)私のdefs.pxd
ファイルには、次のようになります。cythonで別のオブジェクトのメソッドにC++オブジェクトを渡す方法
cdef extern from "A.hpp":
cdef cppclass A:
A() except +
cdef extern from "B.hpp":
cdef cppclass B:
B() except +
int func (A)
(PythonのDEFS付き)マイpyx
ファイルは次のようになります。
from cython.operator cimport dereference as deref
from libcpp.memory cimport shared_ptr
cimport defs
cdef class A:
cdef shared_ptr[cquacker_defs.A] _this
@staticmethod
cdef inline A _from_this(shared_ptr[cquacker_defs.A] _this):
cdef A result = A.__new__(A)
result._this = _this
return result
def __init__(self):
self._this.reset(new cquacker_defs.A())
cdef class B:
cdef shared_ptr[cquacker_defs.B] _this
@staticmethod
cdef inline B _from_this(shared_ptr[cquacker_defs.B] _this):
cdef B result = B.__new__(B)
result._this = _this
return result
def __init__(self):
self._this.reset(new cquacker_defs.B())
def func(self, a):
return deref(self._this).func(deref(a._this))
「事はderef(self._this)
が右に動作していることですが、deref(a._this)
はdoesnのこのエラーが発生しました:
Invalid operand type for '*' (Python object)
どのようにして、1つのPythonオブジェクトの内部C++オブジェクトを別の方法に渡すことができますかPythonで?