On May 5, 2009, at 10:23 PM, Dag Sverre Seljebotn wrote: > Stefan Behnel wrote: >> Lisandro Dalcin wrote: >>> On Tue, May 5, 2009 at 6:28 PM, Stefan Behnel wrote: >>>> I meant >>>> >>>> cdef MyType(object) [(T,V)]: >>>> >>>> here, although I now noticed that there is already the "private >>>> type" >>>> syntax: >>>> >>>> cdef public class _Document [ type LxmlDocumentType, object >>>> LxmlDocument ]: >>>> ... >>>> >>>> so this won't work straight away either... >>>> >>> >>> But this would work anyway, right? >> >> Not that easily. You could have both [] parts next to each other, >> or just >> any one of them. So the parser would fail if you decided to call your >> template variable "type", which isn't that a bad name in this >> context. > > How about > > cdef class A: > T, V = cython.template_args(type, type) > > ?
I prefer the MyType[T,V] syntax. It encapsulates the "meta-type" idea, and also the same syntax can be used both in declaring the type and instantiating the type. > (The reason for the arguments: In C++ you can have stuff like ints in > template arguments as well, might as well leave the possibility > open even > if only passing type is allowed for now). > > This even puts T and V in the proper scope for @cython.locals > declarations, e.g. this passes through (and could even be made to > do the > checks) in pure Python: > > @cython.cdef > class A: > T, V = template_args(type, type) > @cython.locals(a=T, b=v) > def foo(self, a, b): ... I'd rather see the pure Python mode decorate the class than have a magic method, but I don't think decorators get applied soon enough to inject variables into the scope. - Robert _______________________________________________ Cython-dev mailing list [email protected] http://codespeak.net/mailman/listinfo/cython-dev
