perlcall (在“存储回调上下文信息的策略”部分)和扩展和嵌入 Perl(在“回调”部分)列出了 3 种不同的方法来处理从 XS/C 调用 Perl 子例程:
- 立即:XS 调用
- Deferred:将子 ref 保存为 SV* 以供以后使用
- 多个:保存 n 个子参考以供以后使用
上面 #3 列出的示例和详细信息使用 XS 中的哈希将 sub ref 与特定的 C 函数相关联,但它们预定义了固定数量的 C 函数,这是不够的。
我正在使用带有可选参数的回调/函数指针的 C 库的 XS 接口,例如:
blah(custom_type *o, void (*func) (void *data, int more_data), const void * data);
这个库中的 C blah 最终将调用传递给它的函数以及传入的数据。
如果可能的话,我想做一个 C API 到 Perl 的一对一映射。例如
blah($o, \&func, $data);
目前,我上面有#2,但是对 blah() 的另一个调用会覆盖保存的 SV *。
我将如何实现上面的#3?