generics - 如何重新导出具有具体类型的泛型函数?

标签 generics rust

我有一个通用函数foo<T>()。但是,我想专门针对usize类型的函数。我可以声明另一个函数并调用通用函数。但是,我想知道是否可以使用任何语法糖,例如(伪代码)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)
}

最佳答案

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

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

关于generics - 如何重新导出具有具体类型的泛型函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59817810/

相关文章:

c# - C#'s equivalent of Java' s 通配符

scala - 如何从类型中提取类型参数

swift - 甚至未使用的参数的通用 T.Type 和逗号分隔的约束

swift - 如何扩展接受数组通用元素的类型?

json - 难以在关联类型的实例上进行模式匹配

module - 将模块拆分为多个文件

rust - 为 gstreamer crate 0.14 编写 rust/gstreamer 插件需要哪些依赖项?

rust - 为什么我会收到错误 "the trait ` Foo` is not implemented for `&mut T` “即使 T 实现了特征?

c# - 分配给委托(delegate)的通用方法

module - 我可以在不为每个文件引入模块的情况下将 crate 拆分为多个文件吗?