rag*_*oth 5 generics macros ffi rust
我已经以编程方式在内存中构建了一个C函数,我可以在Rust中调用它.
type AddFn = extern "C" fn(isize, isize) -> isize;
let Add = build_function::<AddFn>(®ion, code);
fn build_function<T>(region: &MappedRegion, contents: &[u8]) -> Box<T> {
unsafe {
...
mem::transmute(Box::new(region.addr))
}
}
Run Code Online (Sandbox Code Playgroud)
这需要我知道我生成的函数的签名,在这种情况下AddFn.我希望能够在运行时构建此签名,例如let x = 3u8; macro!(x, f64) == fn(f64, f64, f64) -> f64.我找不到以这种方式生成函数的方法.相关问题是无法调用在运行时生成的函数.如果没有部分应用或完成上述逻辑的方法,我无法弄清楚如何在没有已知签名的情况下调用生成的函数.是否可以在Rust中以这种方式以编程方式生成函数签名?
更新:Rust对可变参数C函数的支持(extern "C" fn(x:int, ...)允许任意sysv ABI兼容函数签名.现在唯一的问题是在运行时调用它们.有没有办法在命名函数上执行部分应用程序?
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |