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