Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to declare a vector of pointers in Cython?

Tags:

c++

python

cython

I want to declare something like that:

cdef vector[Node*] list2node(list my_list):

But Cython gives me this error:

cdef vector[Node*] list2node(list my_list):
                ^
------------------------------------------------------------

mod.pyx:77:20: Expected an identifier or literal
like image 859
Tarantula Avatar asked Mar 22 '11 18:03

Tarantula


2 Answers

You shouldn't need the * -- vector[Node] should generate code for a vector of Node pointers. Using 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

Generates the C++ code:

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);
like image 103
samplebias Avatar answered Sep 19 '22 00:09

samplebias


Taking the answer from this SO answer, what you should do is

ctypedef Node* Node_ptr

and then use Node_ptr across your program.

like image 30
hlin117 Avatar answered Sep 20 '22 00:09

hlin117