如何在 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 中的模板参数

在 cython 中快速访问稀疏矩阵:memoryview 与字典向量

如何通过cython接口返回对象引用的c ++函数

在 cython 的循环中创建 c++ 映射

在 C++ 中,如何获取指向向量的指针?

在 Cython 的结构中使用指针数组