簡體   English   中英

是否可以在特征上具有通用功能?

[英]Is it possible to have a generic function on a trait?

我有:

struct Plumbus<'a> {
    grumbo: &'a Grumbo,
}

trait Grumbo {
    fn dinglebop<T>(&self, x: &mut T) -> bool { false }
}

但我得到:

error[E0038]: the trait `Grumbo` cannot be made into an object
 --> plumbus.rs:4:5
  |
4 |     grumbo: &'a Grumbo,
  |     ^^^^^^^^^^^^^^^^^^ the trait `Grumbo` cannot be made into an object
  |
  = note: method `dinglebop` has generic type parameters

我想讓dinglebop默認不執行任何操作,但是取決於GrumboT ,如果對特定的Grumbo實現有意義,則可能用T填充x

在C ++中,這可以通過部分專業化來實現。 我不確定Rust的目標是什么。

  • 是否可以在特征上具有這樣的通用功能?
  • 如何實現對任意T擁有dinglebop()而又不將我的Plumbus特定 T

是否可以在特征上具有通用功能?

是。 但是您隨后嘗試將特征用作對象。 如果特征具有泛型方法,則不能將其用作對象,但仍可以將其用作類型參數的綁定。

也就是說,不要使用&'a Gumbo ,而要使用T: Gumbo

struct Plumbus<'a, T: Gumbo> { 
    grumbo: &'a T,
}

對於trait對象,僅在運行時知道實現。 而且它的通用參數是實現類型的一部分,因此編譯器不知道如何調用它。 T: Gumbo您對T大小施加了約束,但是編譯器在使用時始終會知道T ,其中包括其自身的任何參數。

也可以看看:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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