Generics 如何将数字文字与num::Integer类型一起使用?
我试图写一些数字模板函数,我发现了一些障碍。我最近发现的一个代码如下:Generics 如何将数字文字与num::Integer类型一起使用?,generics,rust,Generics,Rust,我试图写一些数字模板函数,我发现了一些障碍。我最近发现的一个代码如下: extern crate num; use num::Integer; use num::Zero; fn f<T: Integer>() -> T { T::zero() + 1 } fn main() { let x: u32 = f(); println!("{}", x); } 这不起作用,因为1是不匹配的类型,并且编译器期望的类型参数为find integral变量
extern crate num;
use num::Integer;
use num::Zero;
fn f<T: Integer>() -> T {
T::zero() + 1
}
fn main() {
let x: u32 = f();
println!("{}", x);
}
这不起作用,因为1是不匹配的类型,并且编译器期望的类型参数为find integral变量
现在,我知道T::zero+T::one确实可以解决上述问题,但如果我使用数字文字,而这些文字没有零,比如2、10、100?或者似乎符合您的需要,该怎么办
extern crate num;
use num::{Integer, FromPrimitive};
fn f<T: Integer + FromPrimitive>() -> T {
T::zero() + T::from_i32(1).unwrap()
}
fn main() {
let x: u32 = f();
println!("{}", x);
}
或
extern crate num;
use num::Integer;
fn f<T: Integer>() -> T {
T::zero() + T::from_str_radix("1", 10).ok().unwrap()
}
fn main() {
let x: u32 = f();
println!("{}", x);
}