如何使用相同的名称公开无法直接公开的c ++函数

时间:2017-08-30 07:41:56

标签: python c++ cython

据我所知,由于内存共享的限制,不可能在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”?

请注意,我无法重命名某些内容中的代码,因为我正在构建现有库的包装器。

提前感谢您的回答。

1 个答案:

答案 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))

http://cython.readthedocs.io/en/latest/src/userguide/sharing_declarations.html#using-cimport-to-resolve-naming-conflicts

相关问题