Cython支持C++11容器吗?

9
Cython提供了一种简单的方法来导入C++标准库的数据结构,例如:
  from libcpp.vector cimport vector
    from libcpp.utility cimport pair

但是关于C++11引入的新容器,比如std::unordered_mapstd::unordered_set等,它们是否被同样支持?我找不到适当的导入语句。

2个回答

22

目前的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: got unknown compilation options, please remove: extra_link_args, extra_compile_args(然后它会因为C++11相关错误而失败)。我的setup.py看起来像这样:ext_modules = cythonize('x.pyx', language='c++', <options>) - David Nemeskey
@David 你必须使用Extension()语法,而不是直接在cythonize()中指定参数。 - Thomas Walther
我不得不在extra_compile_args中添加“-stdlib=libc++”才能使其在Mac OSX 10.11.6上正常工作。 - Noah_S
1
在Ubuntu 20.04上,Cython版本0.29.23可以直接使用,无需额外设置。 - Rune Kaagaard

1

1
这个答案可能在当时是正确的,但现在已经过时了。 - Ami Tavory

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接