Pytanie
Czy istnieje sposób na stworzenie opakowania Pythona dla C++ w klasie C++ z szablonami? (tj. zrób dokładnie to, co jest tutaj pokazane, ale z szablonami: http://docs.cython.org/src/userguide/wrapping_CPlusPlus.html#create-cython-wrapper-class).Cython: szablony w wrapperach klasy Pythona
Wiem o rozwiązaniu typu topionego (https://groups.google.com/forum/#!topic/cython-users/qQpMo3hGQqI), ale to nie pozwala na instatiate klas takich jak vector<vector<int>>
: typy topionego mają, całkiem nieoczekiwanie, nie pojęcie rekursji.
Parafrazując
Co chciałbym osiągnąć to za zawiniętej klasy takich jak:
cdef extern from "header.h":
cdef cppclass Foo[T]:
Foo(T param)
# ...
stworzyć prosty wrapper Pythona:
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)
# ...
jestem całkiem pewny, że nie robi Cython Wsparcie to samo w sobie, ale może ktoś może wymyślić obejście tego problemu. Nie szukam idiomatycznych lub fajnych przykładów, zastanawiam się, czy to możliwe w jakikolwiek sposób.
Co powiesz na to, żeby uruchomić go przez jakieś podstawianie ciągów znaków w celu wygenerowania innego pliku źródłowego dla każdego 'T'? – DavidW
Więc, w gruncie rzeczy, co robi kompilator C++ dla szablonów, ale dla wrapperów cytoników? Myślałem o tym. Jest to z pewnością opcja, którą rozważam, chociaż w pewien sposób rozszerza ona kompilator cythonu i sporo pracy. – piotrMocz
Myślę, że miałem na myśli coś znacznie prostszego: 1) stwórz plik zawierający 'cdef class PyFoo_ {T}: cdef Foo [{T}] * thisptr' itp. 2) Wygeneruj kilka plików cython, wykonując' .format (T = 'std :: vector') 'i zapisywanie wyników. 3) Dołącz te pliki do głównego pliku Cythona (synatax 'include" filename.pxi "'). Oczywiście musisz wybrać klasy do ręcznego wygenerowania, ale zawsze musisz to zrobić. –
DavidW