use*_*710 5 c++ python python-2.x cython
我正在尝试使用Cython包装C++模块,以便我可以在Python中使用它.
该模块有多个类,其中一些类具有将另一个类的对象引用作为参数的方法.
所以假设我有称为"foo"和"bar"的c ++类 - 并且cython将它们包装起来:
cdef extern from "foobar.hpp" namespace "foobar":
cdef cppclass foo:
pass
cdef cppclass bar:
void kungFoo(foo &f)
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个包装类,以便我可以在Python中使用它...
cdef class pyFoo:
cdef foo *thisptr
def __cinit__(self):
self.thisptr = new foo()
cdef class pyBar:
cdef bar *thisptr
def __cinit__(self):
self.thisptr = new bar()
def kungFoo(self, f):
self.thisptr.kungFoo(f.thisptr)
Run Code Online (Sandbox Code Playgroud)
这导致"编译Cython文件时出错".和"无法将Python对象转换为'foo'".
我认为这是因为cdef cppclass foo使foo成为与c ++类关联的"Python对象".但是,当我需要将它作为参数传递给另一个c ++类时,这种聪明的转换似乎不会反过来.
对我来说,这似乎是cython的一个基本问题 - 但我似乎在谷歌上几个小时后找不到任何解决方案.
欢迎任何帮助.
谢谢!
指定 f 参数的类型。所以把它改成这样:
def kungFoo(self, foo &f):
self.thisptr.kungFoo(f)
Run Code Online (Sandbox Code Playgroud)
或这个:
def kungFoo(self, pyFoo f):
self.thisptr.kungFoo(f.thisptr)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1394 次 |
| 最近记录: |