Neal Becker wrote: > Robert Bradshaw wrote: > >> On Oct 1, 2009, at 7:17 AM, Neal Becker wrote: >> >>> I need to code some cython functions which will be instantiated for >>> several >>> different data types. Very much like what c++ templates are used for. >>> >>> What approaches can be used to do this? >>> >>> (I'm guessing some kind of macro text processing. Does cython use >>> cpp?) >>> >>> Now suppose in general I need a little more intelligence. For >>> example, >>> suppose I have a function that is templated on a single datatype. >>> Suppose >>> some types internal to that function depend in a (possibly >>> nontrivial way) >>> on that datatype. Same approach? >>> >>> How about a function templated on multiple datatypes? >> Somewhat hackish is to do this with a pxi. >> >> Define a pxi using a dummy type, e.g. >> >> cdef class Wrapper: >> cdef TYPE value >> cdef set(self, TYPE value): >> self.value = value >> cdef TYPE get(self): >> return self.value >> ... >> >> Then make several pyx/pxd files that do >> >> ctypedef TYPE double >> include "wrapper.pxi" >> >> And voila, "templates." >> >> Of course, eventually we'll want to have a much nicer way of doing >> this, e.g. being able to template cdef classes like you can in C++ >> (though I don't think we want to go with the full template >> metaprograming model they have). >> >> - Robert > > Would that work where a type used within a class or function is 'computed'? > Could > ctypedef TYPE double > be made conditional, for example?
Personally I'd save myself the trouble and use a good templating engine to generate my Cython sources. I know people use http://www.cheetahtemplate.org/ to generate GPU code (with PyCUDA) for instance, so it is probably usable for your purpose. -- Dag Sverre _______________________________________________ Cython-dev mailing list [email protected] http://codespeak.net/mailman/listinfo/cython-dev
