Generics 如何使用具体类型重新导出泛型函数?

Generics 如何使用具体类型重新导出泛型函数?,generics,rust,Generics,Rust,我有一个通用函数foo()。但是,我想专门化类型usize的函数。我可以声明另一个函数并调用泛型函数。但是,我想知道是否有任何语法可以使用,比如(伪代码)pub use foo::as foo_usize 使用std::fmt::Debug; fn-foo(a:&T){ println!(“{:?}”,a) } //我不想要泛型,因为我需要用#[no#mangle]将此函数导出为extern #[没有损坏] 酒吧外部“C”fn foo_usize(a:&usize){ 傅:(一) } 您需要通过

我有一个通用函数
foo()
。但是,我想专门化类型
usize
的函数。我可以声明另一个函数并调用泛型函数。但是,我想知道是否有任何语法可以使用,比如(伪代码)
pub use foo::as foo_usize

使用std::fmt::Debug;
fn-foo(a:&T){
println!(“{:?}”,a)
}
//我不想要泛型,因为我需要用#[no#mangle]将此函数导出为extern
#[没有损坏]
酒吧外部“C”fn foo_usize(a:&usize){
傅:(一)
}

您需要通过显式列出函数并执行调用来执行monomorphization:

use std::fmt::Debug;

fn foo<T: Debug>(a: &T) {
    println!("{:?}", a)
}

#[no_mangle]
pub extern "C" fn foo_usize(a: &usize) {
    foo::<usize>(a)
}
使用std::fmt::Debug;
fn-foo(a:&T){
println!(“{:?}”,a)
}
#[没有损坏]
酒吧外部“C”fn foo_usize(a:&usize){
傅:(一)
}

AFAIK没有这样的语法,但这可以很容易地用自定义属性进行模拟。我稍后会尝试这样做。函数
foo_usize()
的调用约定与原始泛型函数的实例化不同。这不仅仅是重新导出名称的问题——您需要一个包装器在调用约定之间进行转换。我建议你坚持你的代码。这很简单,而且很清楚发生了什么。任何表面上使代码更简洁的包装都只会引入不必要的复杂性并隐藏实际发生的事情,而不会带来任何实质性的好处。