Hi Yichao Yu,

Thank you for the quick reply. Could you please elaborate on how to pass 
the data explicitly as you suggest? I don't quite understand.

On Sunday, May 22, 2016 at 4:14:02 PM UTC-4, Yichao Yu wrote:
>
> On Sun, May 22, 2016 at 4:09 PM, Michael Lindon 
> <[email protected] <javascript:>> wrote: 
> > I have function baz which outputs the product of the input at 2: 
> > 
> > function baz{T}(x::T) 
> >         return convert(Cdouble,x*2)::Cdouble 
> > end 
> > 
> > I want to use this function in some C function that I am calling. 
> Running 
> > 
> > julia> myptr=cfunction(baz,Cdouble,(Ref{Cdouble})) 
> > Ptr{Void} @0x00007f2623c9c1d0 
> > 
> > is fine, and I can proceed to  pass the function pointer to my C 
> function. 
> > 
> > 
> > 
> > 
> > Say I want the product of the input and another integer. I have a higher 
> > order function bar 
> > 
> > function bar(y) 
> >         function foo{T}(x::T) 
> >                 return convert(Cdouble,x*y)::Cdouble 
> >         end 
> > end 
> > 
> > now I can get the baz function like this 
> > 
> > julia> foo=bar(2) 
> > foo (generic function with 1 method) 
> > 
> > foo has the same method as baz, and the same functionality, but 
> cfunction 
> > results in an error: 
> > 
> > julia> myptr=cfunction(foo,Cdouble,(Ref{Cdouble})) 
> > ERROR: cfunction: no method exactly matched the required type signature 
> > (function not yet c-callable) 
> >  in cfunction at c.jl:9 
> > 
> > 
> > :( 
> > 
> > 
> > How can I pass the function pointers of the outputs of my higher order 
> > function bar to my C function? 
>
> Closure is not supported right now. You need to pass the data 
> explicitly. (Most C API should allow that by allowing you to pass an 
> arbitrary `void*` in additional to the function pointer) 
>
> > 
>

Reply via email to