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 № 1L'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 double
s e simili con questo piano.