trb*_*abb 7 generics traits rust
我有:
struct Plumbus<'a> {
grumbo: &'a dyn Grumbo,
}
trait Grumbo {
fn dinglebop<T>(&self, x: &mut T) -> bool { false }
}
Run Code Online (Sandbox Code Playgroud)
但我得到:
struct Plumbus<'a> {
grumbo: &'a dyn Grumbo,
}
trait Grumbo {
fn dinglebop<T>(&self, x: &mut T) -> bool { false }
}
Run Code Online (Sandbox Code Playgroud)
我希望dinglebop默认情况下不执行任何操作,但根据Grumbo和,如果对特定实现有意义T,可能会填充xa 。TGrumbo
在 C++ 中,这可能可以通过部分专业化来完成。我不确定 Rust 的目标是什么。
dinglebop()任意目标T而不专门Plumbus针对特定目标的 T目标?是否有可能对特征有一个通用函数?
是的。但你随后尝试将特征用作对象。如果特征具有泛型方法,那么您不能将其用作对象,但您仍然可以将其用作类型参数的绑定。
也就是说,不使用&'a Gumbo,而是使用 a T: Gumbo:
struct Plumbus<'a, T: Gumbo> {
grumbo: &'a T,
}
Run Code Online (Sandbox Code Playgroud)
对于特征对象,只有在运行时才知道其实现。而且它的泛型参数是实现类型的一部分,因此编译器无法知道如何调用它。你对可能发生的T: Gumbo事情施加了限制T,但是T编译器在使用时始终会知道,其中包括其自身的任何参数。
也可以看看: