2013-10-08 60 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()中指定参数。 –