我正在尝试使用 cython 将 c++ 类公开给 python。我在 *.pxd 文件中编写了它们的定义,并在 *.pyx 文件中实现了一个包装器。但是我试图将函数指针传递给扩展类型时遇到了困难。这是简化的示例。
foo.pyx
from c_foo cimport cFoo
cdef class Foo:
cdef cFoo* _impl
c_foo_holder.pxd
cdef extern from "FooHolder.h":
cdef cppclass cFooHolder:
cFooHolder(cFoo* foo)
foo_holder.pyx
from c_foo_holder cimport cFooHolder
from c_foo cimport cFoo
cdef class FooHolder:
cdef cFooHolder* _impl
def __init__(self, foo):
self._impl = new cFooHolder(<cFoo*>(foo._impl)) # error here
但在最后一行我得到错误“ Python 对象不能转换为原始类型的指针”。我还尝试了其他几种方法,但没有任何效果:
# error: 'Foo' is not a type identifier
from foo import Foo
def __init__(self, Foo foo):
self._impl = new cFooHolder(foo._impl)
# error: 'Foo' is not a type identifier
def __init__(self, foo):
self._impl = new cFooHolder(<Foo>(foo)._impl)