我的目标是打印具有trait object成员的struct的内容,但我找不到告诉Rust编译器该成员还实现了其他trait(如Display或Debug)的方法。
例如,在以下程序中,我想打印S2的结构体(并进行比较的S1),但我在fmt的实现中遇到了困难。
例如,在以下程序中,我想打印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" }
是否有可能为像S2
这样的结构体实现Debug
?
(Rust版本:1.35)