我想从C ++调用Julia函数。这个Julia函数将另一个Julia函数作为参数(回调函数)。我想完全用C ++编写这个回调函数,并将其直接传递给Julia,而不是在Julia的名称空间中声明它的名称,就像传递其他原始类型一样。据推测,回调函数的C ++实现的参数将以jl_value_t *
作为其类型。
有人能为我提供一个如何做到这一点的例子吗? embedded Julia example非常好,但似乎没有说明这种情况。
更新:根据Yakk的回答进行修改和澄清。
答案 0 :(得分:1)
这个例子涵盖了这种情况。
这里我们称之为c函数:
jl_eval_string("println( ccall( :my_c_sqrt, Float64, (Float64,), 2.0 )
这是在示例的顶部定义的。
在其他地方有一个定义朱莉娅功能的例子。定义一个在您的c代码中执行ccall
的操作。
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
等。