簡體   English   中英

`impl 和有什么區別<T> T 的 Trait 在哪里 T:Trait2` 和 `impl Trait for dyn Trait2`?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM