rust - 所有 T、&T、&mut T、[T]、&[T]、*mut T 的通用实现

标签 rust

考虑这段代码:

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

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

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

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

很遗憾,我没能找到它。是否真的有一个全局/通用的“实现者”?

最佳答案

好吧,你可以对你的特征做一个通用的实现:

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 目前不允许对泛型进行专门化(尽管上面有一个 open RFC),因此您的特征实现必须按原样适用于任何 T。

关于rust - 所有 T、&T、&mut T、[T]、&[T]、*mut T 的通用实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56177664/

相关文章:

rust - 如何重用结构的公共(public)代码?

实现 drop 特性后 rust drop 调用序列

rust - 如何将函数推广到不同位置具有相似字段的两种类型?

dll - 可以像 c 库那样从其他语言使用 rust 库吗?

rust - 根据运行时值传递不同的特征实现

rust - 如何在 Rust 中处理/规避 "Cannot assign to ... which is behind a & reference"?

macros - 如何在宏中允许可选的尾随逗号?

reference - 如何为对结构的引用实现 Add 特性?

rust - 查找泛型类型 T 的最大允许值

rust - 可选功能 `uuid` 需要列 #1 ("id"的 UUID 类型)