[Cython] Non-type template parameters

Robert Bradshaw robertwb at gmail.com
Tue Jul 28 09:35:51 CEST 2015


Sorry for not getting back sooner... responses below.

On Mon, Jul 20, 2015 at 2:06 PM, Ian Henriksen
<insertinterestingnamehere at gmail.com> wrote:
> Hi all,
> I've spent a little time working on adding support for non-type
> template parameters. In doing this, it has been very easy to add
> support for doing something like the following:
>
> cdef extern from "add_const.hpp" nogil:
>     int myfunc1[i](int)
> def test():
>     print myfunc1[2](a)
>
> The downside of this is that it does not let the Cython compiler
> distinguish between different kinds of template parameters.
>
> Stricter checking could be added using a syntax like this:
>
> cdef extern from "add_const.hpp" nogil:
>     int myfunc1[int i](int)
> def test():
>     print myfunc1[2](a)
>
> The downsides here are that the syntax doesn't really match the
> existing template syntax. It will also complicate the Cython codebase
> since we'll have to go to greater lengths to allow or disallow all the
> different special cases for templates.
>
> Which version would be preferable?

I think I'd prefer the [int i] syntax. Hopefully it shouldn't
complicate things too much.

> On a similar note, for variadic templates, would we prefer something
> like
>
> cdef extern from "my_variadic.hpp" nogil:
>     T myfunc2[T,...](T, ...)
>
> or something like:
>
> cdef extern from "my_variadic.hpp" nogil:
>     T myfunc2[T, Types...](T, Types... args)
>
> Again, the latter syntax is more explicit, but it will require much more
> complicated code in Cython. It also doesn't match the existing syntax
> very well. The former syntax matches the existing syntax for templates
> better, but will make it hard for Cython to raise errors early on in
> compilation.

Hmm... this is a tougher call. Let's go with the former for now.

> I'd greatly appreciate any input on the best syntax for either use-case.
>
> Regards,
>
> -Ian Henriksen
>
> _______________________________________________
> cython-devel mailing list
> cython-devel at python.org
> https://mail.python.org/mailman/listinfo/cython-devel
>


More information about the cython-devel mailing list