gpt4 book ai didi

rust - 如何为具有特征对象成员的结构实现调试特征?

转载 作者:行者123 更新时间:2023-12-03 11:48:49 28 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Can I get a trait object of a multi-trait instance without using a generic type?

(1 个回答)



Is there any way to create a type alias for multiple traits?

(3 个回答)


2年前关闭。




我的目标是打印具有特征对象成员的结构的内容,但我找不到如何告诉 Rust 编译器该成员还实现了其他特征,如 DisplayDebug .

例如,在下面的程序中,我想打印 S2 的结构(和 S1 进行比较)但我陷入了 fmt 的实现中.

trait Tr {}

impl Tr for usize {}

impl Tr for String {}

#[derive(Debug)]
struct S1<A: Tr + std::fmt::Debug> {
member: Box<A>,
}

struct S2 {
member: Box<Tr>,
}

impl std::fmt::Debug for S2 {
fn fmt(&self, fmt: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
// ??
Ok(())
}
}

fn main() {
let s1 = S1 {
member: Box::new(String::from("abc")),
};

println!("{:?}", s1);

let s2 = S2 {
member: Box::new(String::from("abc")),
};

println!("{:?}", s2);
}

我想要的这个程序的输出是

S1 { member: "abc" }
S2 { member: "abc" }

是否可以实现 Debug对于像 S2 这样的结构?

( rust 版本:1.35)

最佳答案

Is it possible to implement Debug for a struct like S2?



是的,你可以,这在 Book 中有明确指出。

您需要执行 Debug你的特质 S2如下所示:
trait MyTrait {}
impl MyTrait for usize {}
impl MyTrait for String {}

trait MyTraitWritable: MyTrait + Debug {}
impl MyTraitWritable for usize {}
impl MyTraitWritable for String {}

impl std::fmt::Debug for S2 {
fn fmt(&self, fmt: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(fmt, "S2 {{ member: {:?} }}", self.member)
}
}

Playground

关于rust - 如何为具有特征对象成员的结构实现调试特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61953533/

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