您可以在Rust中做类似的事情吗?
trait A : forall<T> B<T> { ... }
也就是说,如果我们想要的话:
impl A for D { ... }
我们必须首先实现:
impl<T> B<T> for D { ... }
答案 0 :(得分:1)
不。 Rust的类型系统目前不支持任何涉及高级类型的功能。但是,它确实支持与您描述的结构类似的结构,但仅限于生命周期参数。例如:
trait B<'a> {}
trait A: for<'a> B<'a> {}
struct D;
impl A for D { }
这是一个错误:
error[E0277]: the trait bound `for<'a> D: B<'a>` is not satisfied
--> src/lib.rs:7:6
|
7 | impl A for D { }
| ^ the trait `for<'a> B<'a>` is not implemented for `D`
在添加全面实施之前,
impl<'a> B<'a> for D { }
Rust最终也将为类型添加类似的功能并非不可能,但我不希望很快出现。
答案 1 :(得分:0)
尽管该语言无法执行您所描述的内容,但有可能重新考虑特征B
,使其在此假设参数类型T
上变得通用。
考虑以下示例B
:
trait B<T> {
fn foo(bar: T) -> u32;
}
为任何B
实现T
的类型实际上等同于实现以下特征的类型:
trait UniversalB {
fn foo<T>(bar: T) -> u32;
}
此方法在方法调用级别声明类型参数。尽管此特征不再是对象安全的,但仍可以用作超级特征:
trait A: UniversalB {}
可能需要对实现进行相应调整。