泛型的 impl &dyn trait bounds 如何实现?

How impl &dyn trait bounds for generics?

我想创建一个 Vec<T>,其中 T 绑定到名为 HTML 的特征:

pub trait HTML {
    fn to_email_body(&self) -> String;
}

现在我想要一个结构:

impl Body {
pub fn new(from: String, to: Vec<String>, components: Vec<C>) -> Self 
    where C: HTML 
    {
        Self {
            from,
            to,
            components,
        }
    }
}

所以我可以将带有通用类型 Tcomponents 传递给 new 构造函数。

但是,我必须创建一个 Vec<&dyn HTML> 以便 Rust 可以在编译期间调整它的大小:

let mut components: Vec<&dyn HTML> = Vec::new();
components.push(&dashboard);

trait impl 看起来像什么?到目前为止我有

impl HTML for Dashboard {
    fn to_email_body(&self) -> String {
        format!("{}", self)
    }
}

现在我收到以下错误:

the trait bound `&dyn HTML: HTML` is not satisfied
the trait `HTML` is not implemented for `&dyn HTML`

我无法在必须定义 trait/trait 实现的 &dyn 部分的地方建立联系!

dyn HTML 实现了 HTML&dyn HTML 没有。将 Body::new 更改为在 C: HTML 中采用 Vec<&C>,或者添加 HTML 的全面实施以供参考:

impl<T: HTML> HTML for &T {
    fn to_email_body(&self) {
        self.to_email_body()
    }
}