首页 > 解决方案 > 所有 T、&T、&mut T、[T]、&[T]、*mut T 的通用 impl

问题描述

考虑这段代码:

pub trait Hello {
    fn hello(&self);
}

impl Hello for Any {
    fn hello(&self) {
        println!("Hello!!!!!");
    }
}

我记得在某处看到 Rust 中有一个新功能,可以让您实现一个可直接访问所有对象的函数,如下所示:

let foo = 0 as u8;
foo.hello();

不幸的是,我一直没能找到它。实际上是否有一个全球/通用的“实施者”?

标签: rust

解决方案


好吧,您可以对您的特征进行通用实现:

pub trait Hello {
    fn hello(&self);
}

impl<T> Hello for T {
    fn hello(&self) {
        println!("Hello!!!!!");
    }
}

fn main() {
    let foo = 0 as u8;
    foo.hello();
    let bar = "world!".to_string();
    bar.hello();
}

请注意,Rust 目前不允许对泛型进行专门化(尽管有一个开放的 RFC),因此您的 trait 实现必须对任何 T 都按原样工作。


推荐阅读