我正在尝试编写一些数字模板函数,我发现了一些绊脚石。我最近发现的是以下代码:
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
是“不匹配的类型”而编译器是“期望的类型参数,找到了整数变量”。
现在,我知道T::zero() + T::one()
确实有效并“修复”了上述问题,但是如果我使用的数字文字没有像Zero
那样的内容,比如2,10,100?< / p>
答案 0 :(得分:1)
FromPrimitive
或Num::from_str_radix
似乎符合您的需求。
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);
}