1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
//使用trait bound有条件的实现方法
trait GetName {
fn get_name(&self) -> &String;
}
trait GetAge {
fn get_age(&self) -> u32;
}
struct PeopleMatchInformation<T,U> {
master: T,
employee: U,
}
impl<T:GetName+GetAge,U:GetName+GetAge> PeopleMatchInformation<T,U> {
fn print_all_information (&self)
{
println!("master age = {}",self.master.get_age());
println!("master name = {}",self.master.get_name());
}
}
struct Teacher {
name: String,
age: u32,
}
impl GetName for Teacher {
fn get_name(&self) -> &String {
&(self.name)
}
}
impl GetAge for Teacher {
fn get_age(&self) -> u32 {
self.age
}
}
struct Student {
name: String,
age: u32,
}
impl GetName for Student {
fn get_name(&self) -> &String {
&(self.name)
}
}
impl GetAge for Student {
fn get_age(&self) -> u32 {
self.age
}
}

fn main() {
let s = Student{name:"xiaohuang".to_string(),
age: 15,};
let g = Teacher{name:"xiaoming".to_string(),
age: 35,};
let m = PeopleMatchInformation{
master: s,
employee: g,
}
m.print_all_information();
}