据我所知,由于内存共享的限制,不可能在python中公开一个返回vector [T]的C ++函数。 因此,有必要创建第二个使用导入函数的函数,并将其正确暴露给python扩展模块。
问题是:我不能使用相同的函数名称,我的扩展模块最终会有许多怪异的函数名称。例如。看下面,导入C ++函数,然后是公开:
cdef extern from "somestuffs.h" namespace "stf":
cdef vector[float] stufffn(int n)
cpdef np.ndarray[np.float64_t, ndim=1] pystufffn(int n):
return np.asarray(stufffn(n))
有没有办法在没有addhoc函数的情况下直接公开函数stufffn? 有没有办法在扩展名中保留名称“stufffn”并避免使用“pystufffn”?
请注意,我无法重命名某些内容中的代码,因为我正在构建现有库的包装器。
提前感谢您的回答。
答案 0 :(得分:0)
下面的doc-link中的一种方法是在pxd
文件中声明您的extern函数,并将其与命名空间一起使用,以便您可以在实现中重用该名称。
# wrappers.pxd
cdef extern from "somestuffs.h" namespace "stf":
cdef vector[float] stufffn(int n)
# mymodule.pyx
cimport wrappers
cpdef np.ndarray[np.float64_t, ndim=1] stufffn(int n):
return np.asarray(wrappers.stufffn(n))