假设我有一个OCaml函数
let _ = register "cbf_coh_insert" (fun k v -> print_endline ("Inserted key=" ^ k ^ " value=" ^ v))
这是一个带有两个参数的函数。在C方面,我会用caml_callback2(*caml_named_value("cbf_coh_insert"), k, v);
来调用它。在C方面,有没有办法检查参数的数量(在这种情况下为2)是否匹配?除了我想调用它并试图捕获一个SIGSEGV。谢谢!
更新:some background。
答案 0 :(得分:2)
NO WAI
这应该在编译时确保(手动或通过代码生成或通过解析和检查C和OCaml代码是否同步)来确保
更新
示例寄存器功能:
let on_cbf_coh_insert (f : string -> string -> unit) = register "cbf_coh_insert" f
更新
我希望有可能将一个闭包/让绑定直接传递给C。
为什么你认为这是不可能的?查看一直执行此操作的现有绑定。
BTW这个问题是XY problem的完美例证。