我正在查看用 Rust 编写的 C API,并使用回调函数。实现模式如下
type FooCallback = extern "C" fn(data: &FooData, context: FooContext);
trait FooCallbackExt {
fn call(&self, data: FooData, context: FooContext);
}
impl FooCallbackExt for FooCallback {
fn call(&self, data_in: FooData, context: FooContext) {
// Doing cool things
}
}
我可以通过创建如下回调函数从 C 端测试这一点:
void callback(const FooData* data, FooContext context)
现在我也想从 Rust 端测试这个接口,尽可能接近公开的 C 接口,以隔离我认为在 Rust 中发生的问题。
获取此数据的 Rust 函数如下所示:
fn foo(&mut self, callback: FooCallback, context: FooContext)
但我对如何从 Rust 端创建回调感到困惑。
我需要在中间创建某种类型的转换器或层吗?或者我可以创建回调的 Rust 类型版本,但让它们都使用相同的特征吗?
您可以轻松创建像 Rust 中那样的回调函数,如下所示:
extern "C" fn bar(data: &FooData, context: FooContext) {
// whatever
}