2013-10-08 59 views
7

用Cython爲我們提供了一種簡單的方法來導入C++標準庫中的數據結構,例如:Cython支持C++ 11容器嗎?

from libcpp.vector cimport vector 
    from libcpp.utility cimport pair 

但對於與C++ 11引入了新的容器:std::unordered_mapstd::unordered_set等都是他們以同樣的方式支持?我找不到合適的進口聲明。

回答

14

當前的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類。

+0

這似乎不適用於(現在的)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++',)''。 –

+0

@David您必須使用Extension()語法,而不是直接在cythonize()中指定參數。 –