Generics 以编程方式构造和调用函数

Generics 以编程方式构造和调用函数,generics,macros,rust,ffi,Generics,Macros,Rust,Ffi,我已经在内存中以编程方式构造了一个C函数,并且能够像这样在Rust中调用它 type AddFn = extern "C" fn(isize, isize) -> isize; let Add = build_function::<AddFn>(&region, code); fn build_function<T>(region: &MappedRegion, contents: &[u8]) -> Box<T> {

我已经在内存中以编程方式构造了一个C函数,并且能够像这样在Rust中调用它

type AddFn = extern "C" fn(isize, isize) -> isize;
let Add = build_function::<AddFn>(&region, code);

fn build_function<T>(region: &MappedRegion, contents: &[u8]) -> Box<T> {
    unsafe {
        ...
        mem::transmute(Box::new(region.addr))
    }
}  
type AddFn=extern“C”fn(isize,isize)->isize;
let Add=build_函数::(&区域,代码);
fn构建函数(区域:&MappedRegion,内容:&[u8])->框{
不安全{
...
mem::transmute(Box::new(region.addr))
}
}  
这要求我知道生成的函数的签名,在本例中为
AddFn
。我希望能够在运行时构造此签名,例如,
let x=3u8;宏!(x,f64)==fn(f64,f64,f64)->f64
。我无法找到以这种方式生成函数的方法。一个相关的问题是无法调用运行时生成的函数。如果没有部分应用程序或实现上述逻辑的方法,我无法找出如何在没有已知签名的情况下调用生成的函数。在Rust中,是否可以通过编程方式生成函数签名

更新:
Rust对可变C函数的支持
(外部“C”fn(x:int,…)
允许使用任意与sysv ABI兼容的函数签名。现在唯一的问题是在运行时调用它们。有没有办法对命名函数执行部分应用程序?

这只是我的观点,但确实感觉你在试图以不应该使用的方式弯曲Rust。我认为Rust是一种优秀的静态类型这是一个有趣的问题,但如果你把你要达到的目标包括在内,你可能会得到更有用的答案,用你迄今为止的工作作为你已经尝试过的例子。我正在尝试JIT编译一些代码。编程签名创建在维护sy的同时使这更容易做到sv ABI兼容性。还有其他方法可以简化cat,但能够在运行时构建函数签名似乎是最优雅的,因为它省去了我手动设置寄存器和堆栈的麻烦,即通用动态调度。我主要使用宏,试图将元组转换为参数,我希望*args,但正如您所说,它破坏了键入。我认为闭包咖喱可以工作,但我不确定它是否可以保持ABI兼容性。似乎相关