gpt4 book ai didi

rust - Rust trait 对象如何返回另一个 trait 对象?

转载 作者:行者123 更新时间:2023-12-03 11:30:15 29 4
gpt4 key购买 nike

如何在 Rust 中尝试类似以下的操作?

builder 类是一个 trait 对象,它返回另一个 trait 对象(类型删除),其中选择的实现由我们正在使用的 builder trait 的特定对象定义。

trait Builder {
// I want this trait to return a trait object
fn commits(&self) -> dyn Commit;

fn finish(&self);
}

trait Commit {
}

struct FooBuilder {
}

struct FooCommit {
}

impl Builder for FooBuilder {
fn commits(&self) -> impl Commit {
FooCommit{ }
}

fn finish(&self) {
}
}

fn get_commits(b: &Builder) {
// trait object returns a trait
let c = b.commits();
}

fn main() {
let b = FooBuilder{};
get_commits(&b);
b.finish();
}

最佳答案

从 Rust 中的 trait 方法返回 trait 对象没有问题:

trait Foo {
fn bar(&self) -> Box<dyn Bar>;
}

需要注意的一件事是您需要返回 Box<dyn Bar> ,不是 dyn Bar , 因为大小为 dyn Bar在编译时不知道,这使得它无用。

当你实现这个特征时,签名必须匹配,所以它应该返回 Box<dyn Bar> ,不是 impl Bar :
impl Foo for MyFoo {
fn bar(&self) -> Box<dyn Bar> {
Box::new(MyBar{})
}
}

关于rust - Rust trait 对象如何返回另一个 trait 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60143046/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com