我有两个类(假设是最简单的类,实现并不重要)。{cdthon>看起来像是这个文件:
cdef extern from "A.hpp":
cdef cppclass A:
A() except +
cdef extern from "B.hpp":
cdef cppclass B:
B() except +
A func ()
我的pyx
文件(使用python defs)如下所示:
问题是我不能从python返回非python对象。实际上,我不想更改我的c++代码来返回指针而不是新对象(因为有很多类似的函数)。现在它给了我一个错误:
Cannot convert 'B' to Python object
如何从python中的另一个方法返回一个包含内部c++对象的python对象?如果我只能在c++进行一些更改之后才能做到这一点,那么如果可能的话,我想要最优雅的解决方案。在
您的问题是,包装类需要一个指针(到^ {< CD1>}分配的对象),但是您的函数在堆栈上返回C++对象。要解决这个问题,必须从堆栈中复制或移动对象。
<>首先确保C++类^ {< CD2>}有工作副本或移动构造函数。如果c++类包含大量成员,则移动构造函数更好。把这是赛顿这样:(不要告诉Cython关于复制构造函数和move构造函数的事情-它会混淆的!C++编译时找到正确的一个。
然后,在
^{pr2}$func
中,使用带有new
的复制/移动构造函数传递给python包装器:相关问题 更多 >
编程相关推荐