[英]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
默認不執行任何操作,但是取決於Grumbo
和T
,如果對特定的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.