用Cython爲我們提供了一種簡單的方法來導入C++標準庫中的數據結構,例如:Cython支持C++ 11容器嗎?
from libcpp.vector cimport vector
from libcpp.utility cimport pair
但對於與C++ 11引入了新的容器:std::unordered_map
,std::unordered_set
等都是他們以同樣的方式支持?我找不到合適的進口聲明。
用Cython爲我們提供了一種簡單的方法來導入C++標準庫中的數據結構,例如:Cython支持C++ 11容器嗎?
from libcpp.vector cimport vector
from libcpp.utility cimport pair
但對於與C++ 11引入了新的容器:std::unordered_map
,std::unordered_set
等都是他們以同樣的方式支持?我找不到合適的進口聲明。
默認情況下,Cython不支持它們,但您可以創建自己的接口,遵循https://github.com/cython/cython/blob/master/Cython/Includes/libcpp/map.pxd的結構。
現在Cython支持unordered_map和unordered_set,因爲0.20.2。
from libcpp.unordered_map cimport unordered_map
from libcpp.unordered_set cimport unordered_set
當前的cython版本允許它們。
確保您setup.py
包含如下:
ext_module = Extension(
"foo",
["foo.pyx"],
language="c++",
extra_compile_args=["-std=c++11"],
extra_link_args=["-std=c++11"]
)
然後可以使用
from libcpp.unordered_map cimport unordered_map
像任何其他STL類。
這似乎不適用於(現在的)Cython:'/usr/local/lib/python2.7/dist-packages/Cython/Compiler/Main.py:554:UserWarning:有未知的編譯選項,請刪除:extra_link_args,extra_compile_args'(然後它與C++ 11相關的錯誤失敗)。我的setup.py如下所示:'ext_modules = cythonize('x.pyx',language ='C++',
@David您必須使用Extension()語法,而不是直接在cythonize()中指定參數。 –
這個答案在當時可能是正確的,但現在已經過時。 –