在ipython中用Cython封装C++标准库

Wrapping C++ Standard library with Cython in ipython

本文关键字:C++ 标准 封装 Cython ipython 中用      更新时间:2023-10-16

根据Cython文档,我编写了如下Cython代码:

In [1]:%load_ext Cython
In [2]: %%cython
         from libcpp.vector cimport vector
​         cdef vector[int] *vec_int = new vector[int](10)

编译后,ipython生成以下错误:

Error compiling Cython file:
------------------------------------------------------------ 
... 
from libcpp.vector cimport vector 
cdef vector[int] *vec_int = new vector[int](10) 
                               ^ 
------------------------------------------------------------
/Users/m/.ipython/cython/_cython_magic_a72abb419ccf1b31db9a1851b522a4bf.pyx:3:32: Operation only allowed in c++

我的代码出了什么问题?

您需要通过特殊注释告诉cython您正在编译C++而不是C

# distutils: language = c++

将其添加到%%cython块之后将解决您的问题。

作为@romeric答案的替代方案,ipython Cython magic的文档建议使用

%%cython --cplus

以打开C++模式。也可以通过在IPython控制台中运行%%cython?来访问该命令的帮助。

就我个人而言,我认为使用distutils注释方法有很多需要说明的地方,因为它将语言与需要它的代码联系起来