2017-03-31 29 views
1

我想換一個CPP應用程序和源代碼包含在頭文件用Cython相當於爲「使用時間= cppClassDefinition <withT>」

using Time = cppClassDefinition<withT> 

... 

void setDefaultTime(Time x) 

的用Cython相當於該會是怎樣以下?

我已經試過

cdef extern from "headerfile.h" namespace "ns": 
    ctypedef cppClassDefinition<withT> Time 

沒有成功。雖然Cython在這一步沒有抱怨,但是當我嘗試使用函數setDefaultTime(1.0)時,會引發編譯錯誤。錯誤狀態「無法分配型‘雙’到‘時間’。然而,在CPP代碼,這似乎是工作的罰款。

我也試過

cdef extern from "headerfile.h" namespace "ns": 
    cdef cppclass Time: 
     pass 

而且也失敗了。任何建議嗎?這可能使用用Cython?

回答

1

正如你在這個問題建議,你應該能夠在這種情況下使用使用

ctypedef cppClassDefinition[withT] Time 

因爲using ... = ...相當於typedef。 (注意與你問題中的代碼相比方括號的變化)。

我相信問題在於你試圖做setDefaultTime(1.0)。 Cython無法知道double可以轉換爲Time,並且沒有任何方法可以告訴它隱含的C++轉換。

輪最簡單的方法就是直接告訴用Cython該函數簽名是

void setDefaultTime(double x) 

(您可以將C++的簽名是)。這將滿足Cython,然後它生成的C++代碼應該最終正常工作,只要double可以隱式轉換爲Time(如問題所示)

+0

謝謝!這工作! – kdheepak

相關問題