[Cython] Fused Types
Dag Sverre Seljebotn
d.s.seljebotn at astro.uio.no
Tue May 3 16:06:05 CEST 2011
On 05/03/2011 03:51 PM, Stefan Behnel wrote:
> mark florisson, 03.05.2011 15:17:
>> if you have
>>
>> cdef func(floating x, floating y):
>> ...
>>
>> you get a "float, float" version, and a "double, double" version, but
>> not "float, double" or "double, float".
>
> So, what would you have to do in order to get a "float, double" and
> "double, float" version then? Could you get that with
>
> ctypedef fused_type(double, float) floating_df
> ctypedef fused_type(float, double) floating_fd
>
> cdef func(floating_df x, floating_fd y):
>
> ?
Well, if you do something like
ctypedef fused_type(float, double) speed_t
ctypedef fused_type(float, double) acceleration_t
cdef func(speed_t x, acceleration_t y)
then you get 4 specializations. Each new typedef gives a new polymorphic
type.
OTOH, with
ctypedef speed_t acceleration_t
I guess only 2 specializations.
Treating the typedefs in this way is slightly fishy of course. It may
hint that "ctypedef" is the wrong way to declare a fused type *shrug*.
To only get the "cross-versions" you'd need something like what you
wrote + Pauli's "paired"-suggestion.
Dag Sverre
More information about the cython-devel
mailing list