Cython & C ++: pasando por referencia

Soy un novato con Cython y C ++, así que tengo una pregunta sobre la transmisión de argumentos. Quiero evitar pasar una copia de un argumento en el siguiente escenario:

# somefile.pyx #distutils: language = c++ from libcpp.vector cimport vector def add_one(vector[int] vect): cdef int i n = vect.size() for i in range(n): vect[i] += 1 cdef vector[int] v for i in range(100000): v.push_back(i) add_one(v) # <-- ?? 

Quiero que el método add_one solo modifique v “in-place”. Creo que en C ++, puede lograr esto si está pendiente de antemano el argumento con & , lo que significa que cualquier cambio en el puntero se transfiere a pointee. De esa manera, no tiene que preocuparse por pasar un puntero o el objeto real, es decir,

 add_one(v); # in c++ 

¿Puedo hacer lo mismo en Cython, o tengo que cambiar explícitamente el tipo arg a una referencia, es decir, def add_one(vector[int]* vect) ?

Encontré la respuesta a mi propia pregunta. Aparentemente, puede pasar por referencia, pero la función DEBE estar cdef , no cdef . es decir

 # somefile.pyx #distutils: language = c++ from libcpp.vector cimport vector cdef void add_one(vector[int]& vect): cdef int i n = vect.size() for i in range(n): vect[i] += 1 cdef vector[int] v for i in range(100000): v.push_back(i) add_one(v)