![](/img/trans.png)
[英]What's the difference between `<T: Trait>` and `where T: Trait`?
[英]What's the difference between `impl<T> Trait for T where T: Trait2` and `impl Trait for dyn Trait2`?
當擴展在其他 crate 中定義的 trait 時,似乎有兩種方法可以默認實現新的 trait。
特征的原始定義是
pub trait Trait1 {
fn f1(&self);
}
為了擴展這個特質的功能,我們定義了一個特質Trait2
,
pub trait Trait2 {
fn f2(&self);
}
現在,因為我們希望該功能默認可用,我們可以實現以下內容
impl<T> Trait2 for T
where
T: Trait1,
{
pub fn f2(&self) {
self.f1()
}
}
impl Trait2 for dyn Trait1 {
pub fn f2(&self) {
self.f1()
}
}
我觀察到的是,當與 trait 對象混合時,這兩種實現都是必需的。
我知道impl<T>
一個用於具體類,而另一個用於dyn
對象。 那是對的嗎? 有沒有辦法在這里共享這兩種類型的默認實現? 在我的場景中,我不得不復制並粘貼整個實現,只更改第一行。
如果我正確理解了您的問題,只需添加綁定到T
的 unsized ( ?Sized
) :
impl<T> Trait2 for T where T: Trait1 + ?Sized
這Trait2
為實現Trait2
的無大小類型(例如dyn Trait1
)實現了Trait1
。 默認情況下,所有類型參數都是有大小的,因此不匹配無大小的類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.