【发布时间】:2021-02-18 15:35:33
【问题描述】:
我想知道是否可以告诉 Rust 编译器两个泛型类型是相同的。
在特定情况下,我有一个泛型方法的特征,我想实现一个与字段具有相同泛型类型的结构,如下例所示:
trait Trait {
fn foo<T>(&self, t: T) -> T;
}
struct Struct<T> {
t: T
}
impl<T> Trait for Struct<T> {
fn foo<U>(&self, t: U) {
self.t
}
}
Ofc 这里我有一个编译器错误,因为它需要 U 但有一个 T。 我该如何处理这种情况?
移动通用外部 foo 创建 Trait<T> 不是一种选择。
【问题讨论】:
-
但它们不一定与这样的声明相同!
let s = Struct { t: 42 }; func(&s);和fn func(s: &dyn Trait) { s.foo("not an integer"); }必须是合法的。使Trait泛型或给它一个关联类型是去这里的唯一方法。 -
这个问题太宽泛,一般无法回答,基本上相当于“我如何在不实现这个特征的情况下实现这个特征?”直截了当的回答是“您不能”,但您几乎可以肯定有比这更具体的需求,如果您更详细地解释问题,我们可能会为您提供帮助。