2011-11-28 8 views
6

¿Cómo puedo utilizar la función remove desde <algorithm>? (O cualquier otra operación, quiero usar esto con vectores, traté de cdef extern para declararlo, pero todavía no existe una función de plantilla, creo)Cython vector operations

Respuesta

6

Cython solo puede vincular razonablemente contra código compilado en alguna biblioteca externa siguiente las convenciones de llamadas de C. Para usar funciones de plantilla, deberá escribir una función de contenedor extern "C" que utiliza una encarnación específica del algoritmo (es decir, debe corregir los parámetros de la plantilla).

+0

Gracias. Esa es una buena manera. Pero en este caso no puedo usar las clases cyde cdef como plantillas (es decir, cdef vector [MyCdefClass] vec), ¿verdad? Tal vez con * PyObject, pero hay una pérdida de rendimiento de esta manera. (Utiliza la búsqueda de tabla de Python) – Patric

+0

@Patric: Hasta donde yo sé, no hay una manera realmente fácil de envolver un 'std :: vector' para su uso en Python usando Cython. –

+0

Tenemos esto: 'from libcpp.vector cimport vector'. Y podemos hacer cosas como esta 'cdef class Obj: pass; vector cdef [Obj] vec; vec.push_back (Obj()); '. – Patric