2017-08-30 103 views
0

据我所知,不可能在python中公开一个返回vector [T]的C++函数,因为内存共享限制。 因此,有必要制作第二个使用导入函数的函数,并将其正确显示给python扩展模块。如何暴露无法直接暴露,具有相同名称的C++函数

问题是:我不能使用相同的函数名称,并且我的扩展模块以许多奇怪的函数名称结尾。例如。见下面,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)) 

有没有办法直接暴露函数stufffn没有addhoc函数? 有没有办法在扩展名中保留名字“stufffn”并避免使用“pystufffn”?

请注意,我无法重新编写某些东西的代码,因为我正在为现有的库构建包装。

在此先感谢您的任何答案。

+0

可以使用升压蟒暴露C++类和函数python.And是你可以从C++函数返回向量蟒蛇。只有你必须暴露矢量类型以及python模块。 – sagar

+0

我现在发现助推python,看起来不错。 你有最后两句话的指针/参考/例子吗? – GDegottex

+0

另请参见pybind11,本质上是一个“现代”(利用c + + 11)版本的Boost.Python https://pybind11.readthedocs.io/en/stable/intro.html – chrisb

回答

0

下面的文档链接的一种方法是在pxd文件中声明您的外部函数,并将其与命名空间一起使用,以便您可以在实现中重新使用该名称。

# 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

+0

太棒了!只是解决它! – GDegottex