Вызов функции Julia из C ++, которая принимает функцию обратного вызова Julia в качестве аргумента

Я хотел бы вызвать функцию Джулии из C ++. Эта функция Julia принимает в качестве аргумента другую функцию Julia (функцию обратного вызова). Я хотел бы написать эту функцию обратного вызова полностью на C ++ и передать ее непосредственно Джулии, не объявляя имя для нее в пространстве имен Джулии, например, как передаются другие примитивные типы. Предположительно аргументы моей реализации C ++ функции обратного вызова будут иметь jl_value_t * как их типы.

Кто-нибудь может привести пример того, как это сделать? встроенный пример Юлии довольно хорошо, но это, похоже, не иллюстрирует этот случай.

Обновление: пересмотрено и уточнено на основе ответа Якка.

1

Решение

Пример охватывает этот случай.

Здесь мы вызываем функцию c:

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

Который определяется в верхней части примера.

В другом месте есть пример определения функции Джулия. Определите тот, который делает ccall в ваш код c.

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

(Кроме как вместо 2*x оно делает ccall(blah)).

Возьмите эту функцию julia и получите указатель на нее (также в вашем связанном примере).

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

И передать его функции julia, ожидающей обратного вызова. Или используйте eval, чтобы передать его по имени.

Код C ++ будет передан doubleс и тому подобное с этим планом.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]