4

我需要在 cdef 函数中将整数的 Python 列表转换为 vector[int] 以调用另一个 C 函数。我试过这个:

cdef pylist_to_handles(hs):
    cdef vector[int] o_vect
    for h in hs:
        o_vect.push_back(h)
    return o_vect

这应该可以工作,因为我只需要从其他 cdef 函数调用它,但我收到此错误:

无法将 'vector<int>' 转换为 Python 对象

我究竟做错了什么 ?

4

2 回答 2

10

在使用libcpp.vector的Cython 0.17 中,您可以这样做:

cdef vector[int] vect = hs
于 2012-09-04T17:39:17.567 回答
5

你真正拥有的是:

cdef object pylist_to_handles(hs):
    ...
    return <object>o_vect

如果您没有明确设置类型,则假定它是 python 对象(代码中的“对象”)。正如您在代码中看到的,您正在尝试将 vector[int] 转换为一个对象,但 Cython 不知道如何处理它。

只需在 cdef 中添加一个返回类型:

cdef vector[int] pylist_to_handles(hs):
于 2012-07-12T16:01:55.737 回答