【发布时间】:2014-01-20 19:09:01
【问题描述】:
考虑以下简单的 C++ 代码。 (printlist.h)
#ifndef TESTLIB_H
#define TESTLIB_H
#include <iostream>
#include <list>
void printlist(std::list<int> &);
#endif
(打印列表.c)
#include "printlist.h"
using namespace std;
void printlist(list<int> &l)
{
for(list<int>::const_iterator i = l.begin(); i != l.end(); i++)
cout << *i << ' ';
cout << endl;
}
我的问题是如何将此代码与 cython 一起使用,困难在于 printlist 需要一个 stl::list。有没有办法使用“extern”声明它?如果没有,使用此功能的最简单方法是什么。
这是我的尝试:
(test.pyx)
from libcpp.list cimport list
cdef extern from "printlist.h":
void printlist(std::list<int> &)
cdef list[int] l = range(10)
printlist(l)
(setup.py)
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
ext_modules = [Extension("test", ["test.pyx", "printlist.C"], language='c++',)]
setup(cmdclass = {'build_ext': build_ext}, ext_modules = ext_modules)
我得到的错误信息如下:
Error compiling Cython file:
------------------------------------------------------------
...
from libcpp.list cimport list
cdef extern from "printlist.h":
void printlist(std::list<int> &)
^
------------------------------------------------------------
test.pyx:4:27: Expected an identifier or literal
【问题讨论】: