1 个不稳定版本
0.1.0 | 2020年6月28日 |
---|
#23 in #equals
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);
}