使用trait_bound有条件的实现方法:
1trait GetName { 2 fn get_name(&self) -> &String; 3} 4 5trait GetAge { 6 fn get_age(&self) -> u32; 7} 8 9struct PeopleMatchInformation<T, U> { 10 master: T, 11 student: U, 12} 13 14impl<T: GetName + GetAge, U: GetName + GetAge> PeopleMatchInformation<T, U> { 15 fn print_all_information(&self) { 16 println!("in print_all_information"); 17 println!("master name = {}", self.master.get_name()); 18 println!("master age = {}", self.master.get_age()); 19 println!("student name = {}", self.student.get_name()); 20 println!("student age = {}", self.student.get_age()); 21 } 22} 23 24struct Teacher { 25 name: String, 26 age: u32, 27} 28 29impl GetName for Teacher { 30 fn get_name(&self) -> &String { 31 &(self.name) 32 } 33} 34 35impl GetAge for Teacher { 36 fn get_age(&self) -> u32 { 37 self.age 38 } 39} 40 41struct Student { 42 name: String, 43 age: u32, 44} 45 46impl GetName for Student { 47 fn get_name(&self) -> &String { 48 &(self.name) 49 } 50} 51 52impl GetAge for Student { 53 fn get_age(&self) -> u32 { 54 self.age 55 } 56} 57 58fn main() { 59 let s = Student { name: "xiaoming".to_string(), age: 15 }; 60 let t = Teacher { name: "xiaohuang".to_string(), age: 30 }; 61 let m = PeopleMatchInformation { master: t, student: s }; 62 m.print_all_information(); 63}
本节全部源代码:
https://github.com/anonymousGiga/learn_rust/blob/master/learn_trait4/src/main.rs