首页 > 解决方案 > 如何重新导出具有具体类型的泛型函数?

问题描述

我有一个通用功能foo<T>()。但是,我想专门针对 type 的功能usize。我可以声明另一个函数并调用泛型函数。但是,我想知道是否可以使用任何语法糖,例如 (pseudo code) pub use foo::<usize> as foo_usize

use std::fmt::Debug;

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

// I do not want generics, as I need to export this function as extern with #[no_mangle]
#[no_mangle]
pub extern "C" fn foo_usize(a: &usize) {
    foo::<usize>(a)
}

标签: genericsrust

解决方案


您需要通过显式列出函数并执行调用来自己执行单态化:

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)
}

推荐阅读