/ / Chiamando una funzione di Julia da C ++ che accetta come argomento una funzione di callback di Julia - c ++, julia-lang

Chiamando una funzione di Julia da C ++ che prende come argomento una funzione di callback di Julia - c ++, julia-lang

Mi piacerebbe chiamare una funzione di Julia da C ++. Questa funzione di Julia accetta un'altra funzione di Julia come argomento (una funzione di callback). Mi piacerebbe scrivere questa funzione di callback interamente in C ++, e passarla direttamente a Julia, senza dichiarare un nome per esso nello spazio dei nomi di Julia, come il modo in cui vengono passati altri tipi primitivi. Presumibilmente gli argomenti per la mia implementazione C ++ della funzione di callback avranno jl_value_t * come i loro tipi.

Qualcuno può fornirmi un esempio di come farlo? Il esempio di Julia incorporato è abbastanza buono, ma non sembra illustrare questo caso.

Aggiornamento: rivisto e chiarito in base alla risposta di Yakk.

risposte:

1 per risposta № 1

L'esempio copre questo caso.

Qui chiamiamo una funzione c:

jl_eval_string("println( ccall( :my_c_sqrt, Float64, (Float64,), 2.0 )

Quale è definito all'inizio dell'esempio.

Altrove c'è un exampe di definire una funzione di Julia. Definire uno che fa a ccall nel tuo codice c.

jl_eval_string("my_func(x) = 2*x");

(Tranne invece di 2*x lo fa ccall(blah)).

Prendi questa funzione di julia e prendi un puntatore (anche nel tuo esempio collegato).

jl_function_t *func = jl_get_function(jl_base_module, "reverse!");

E passalo alla funzione Julia aspettando una richiamata. Oppure usa una valutazione per passarla per nome.

Il codice C ++ verrà passato doubles e simili con questo piano.