如何在 Cython 中声明指针向量?
Posted
技术标签:
【中文标题】如何在 Cython 中声明指针向量?【英文标题】:How to declare a vector of pointers in Cython? 【发布时间】:2011-03-22 18:34:19 【问题描述】:我想声明类似的东西:
cdef vector[Node*] list2node(list my_list):
但是 Cython 给了我这个错误:
cdef vector[Node*] list2node(list my_list):
^
------------------------------------------------------------
mod.pyx:77:20: Expected an identifier or literal
【问题讨论】:
【参考方案1】:您不应该需要*
-- vector[Node]
应该为节点指针向量生成代码。使用 Cython 0.14.1:
cdef class Node:
pass
cdef vector[Node] list2node():
pass
cdef vector[int] test_int():
pass
cdef vector[int*] test_intp():
pass
生成 C++ 代码:
static PyTypeObject *__pyx_ptype_3foo_Node = 0;
static std::vector<struct __pyx_obj_3foo_Node *> __pyx_f_3foo_list2node(void);
static std::vector<int> __pyx_f_3foo_test_int(void);
static std::vector<int *> __pyx_f_3foo_test_intp(void);
【讨论】:
Node 和 Node* 怎么能一样?我很困惑【参考方案2】:从this SO answer那里得到答案,你应该做的是
ctypedef Node* Node_ptr
然后在整个程序中使用Node_ptr
。
【讨论】:
我也喜欢这个 ctypedef,让 Node 与 Node* 混淆并不有趣以上是关于如何在 Cython 中声明指针向量?的主要内容,如果未能解决你的问题,请参考以下文章
用函数指针包装 C++ 代码作为 cython 中的模板参数