可以根据不同的泛型类型实现不同的函数

    1. pub struct Wrapper<T> {
    2. pub inner: T
    3. }
    4. impl <T> Wrapper<T>
    5. where T:std::fmt::Debug
    6. {
    7. pub fn debug(&self) {
    8. println!("{:?}", self.inner);
    9. }
    10. }

    我们可以说,当T实现了Debug这个trait的时候,给Wrapper这个结构体实现debug函数,所以

    1. fn main() {
    2. let w = multiple_impl::Wrapper{
    3. inner: String::new()
    4. };
    5. w.debug()
    6. }

    这样调用是可以的

    1. struct Foo;
    2. fn main() {
    3. let w = multiple_impl::Wrapper{
    4. inner: Foo{}
    5. };
    6. w.debug()
    7. }

    这样就会有编译错误,因为Foo这个结构体没有实现Debug trait