泛型的 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,
}
}
}
所以我可以将带有通用类型 T
的 components
传递给 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()
}
}
我想创建一个 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,
}
}
}
所以我可以将带有通用类型 T
的 components
传递给 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()
}
}