#generic #cast #equals #parameters #cast-ref #type-parameters

generic-cast

将泛型类型参数转换为类型

1 个不稳定版本

0.1.0 2020年6月28日

#23 in #equals

MIT/Apache

4KB

generic-cast

想象一下,你想为泛型函数的特定类型参数提供一个替代实现

use generic_cast::{cast_ref, equals};
use std::ops::Add;

fn double<T: 'static + Copy + Add<Output = T>>(a: T) -> T {
    if let Some(a) = cast_ref::<T, u32>(&a) {
        let result = a << 1; // Faster implementation
        *cast_ref::<u32, T>(&result).unwrap()
    } else {
        a.add(a).clone()
    }
}

或者只是检查类型参数是否是特定类型

fn print<T: 'static + std::fmt::Display>(a: T) {
    if generic_cast::equals::<T, f32>() {
        println!("Its a float!");
    }
    println!("{}", a);
}

无运行时依赖