有界泛型类型

// Only accept T and U generic types that also implement Debug
fn print_objects<T: Debug, U: Debug>(a: T, b: U) {
    println!("A: {:?} B: {:?}", a, b);
}

print_objects(13, 44);
// or annotated explicitly
print_objects::<usize, u16>(13, 44);

边界必须涵盖该类型的所有用途。增加是由 std::ops::Add 特征完成的,它具有输入和输出参数本身。where T: std::ops::Add<u32,Output=U> 表示可以将 Add T 转换为 u32,并且此添加必须生成 U 类型。

fn try_add_one<T, U>(input_value: T) -> Result<U, String> 
    where T: std::ops::Add<u32,Output=U> 
{
    return Ok(input_value + 1);
}

Sized bound 默认隐含。?Sized bound 也允许未经过类型化的类型。