2017-08-30 102 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