Domanda
C'è un modo per creare un wrapper Python per la classe C++ con wrapper Cython con i modelli? (Esegui esattamente ciò che è mostrato qui ma con i modelli: http://docs.cython.org/src/userguide/wrapping_CPlusPlus.html#create-cython-wrapper-class).Cython: modelli in wrapper di classe python
Sono a conoscenza dei tipi di fusibile soluzione (https://groups.google.com/forum/#!topic/cython-users/qQpMo3hGQqI) ma ciò non consente di instaziare classi come vector<vector<int>>
: i tipi con fusione hanno, non sorprendentemente, nessuna nozione di ricorsione.
Riformulare
Quello che vorrei realizzare è per una classe avvolto come:
cdef extern from "header.h":
cdef cppclass Foo[T]:
Foo(T param)
# ...
creare un semplice involucro Python:
cdef class PyFoo[T]: # I know the '[T]' can't be here, it's a wish
cdef Foo[T] *thisptr
def __cinit__(self, param):
self.thisptr = new Foo[T](param)
# ...
Sono abbastanza sicuro che doesn Cython supportarlo di per sé, ma forse qualcuno può pensare a una soluzione alternativa. Non sto cercando esempi idiomatici o simpatici, mi sto solo chiedendo se è possibile in qualsiasi modo.
Che ne dici di eseguirlo attraverso una sorta di sostituzione di stringhe per generare un file sorgente diverso per ogni 'T'? – DavidW
Quindi, in sostanza, cosa fa il compilatore C++ per i template, ma per i wrapper Cython? Ci ho pensato. È sicuramente un'opzione che sto considerando, anche se in qualche modo sta estendendo il compilatore cython e un bel po 'di lavoro. – piotrMocz
Penso che intendessi qualcosa di molto più semplice: 1) crea un file contenente 'cdef class PyFoo_ {T}: cdef Foo [{T}] * thisptr' ecc. 2) Genera un mucchio di file cython facendo' .format (T = 'std :: vector') ', e salvando i risultati. 3) Includere questi file nel file Cython principale (synatax 'include" nomefile.pxi "'). Ovviamente devi scegliere le classi da generare manualmente, ma devi sempre farlo. –
DavidW