用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()中指定参数。 –
这个答案在当时可能是正确的,但现在已经过时。 –