Rust 实现嵌套特征
我有一些特点(在删除函数和一些参数膨胀后)如下所示:Rust 实现嵌套特征,rust,traits,Rust,Traits,我有一些特点(在删除函数和一些参数膨胀后)如下所示: trait Foo { } trait Boo { } trait Bar<T: Foo> { } trait Baz { } 给 错误:类型参数T不受impl-trait、self-type或谓词的约束[E0207] 鉴于 impl<U: Bar<T> + Boo> Baz for U { } impl Baz for U{} 屈服 错误:类型名称T未定义或不在范围[E0412]中 在(稳定的)锈病
trait Foo { }
trait Boo { }
trait Bar<T: Foo> { }
trait Baz { }
给
错误:类型参数T
不受impl-trait、self-type或谓词的约束[E0207]
鉴于
impl<U: Bar<T> + Boo> Baz for U { }
impl Baz for U{}
屈服
错误:类型名称T
未定义或不在范围[E0412]中
在(稳定的)锈病中(希望没有任何动态调度),可以/如何做到这一点
编辑:一些人暗示了一些类似的问题,基本上有两种方法(我发现这两种方法都不适合我的情况):
t
,例如,我想编写一些具有签名的函数,如fn bla()
,其中我想知道U
和V
为相同的t
实现Bar
。(或者有没有办法通过关联的类型执行此操作?)U
和T
来使用某种包装。我也不想使用它,因为我有几层这样的“特质依赖”,所以在每一层中包装东西会使代码膨胀很多因此,更新后的问题是:不使用关联类型或包装器,是否有解决此问题的方法?您可以将
T
作为关联类型:
trait Foo { }
trait Boo { }
trait Bar {
type T: Foo;
}
trait Baz { }
impl<U: Bar + Boo> Baz for U
// this where clause is not necessary (this bound is already true)
// where U::T: Foo
{ }
trait Foo { }
trait Boo { }
trait Bar {
type T: Foo;
}
trait Baz { }
impl<U: Bar + Boo> Baz for U
// this where clause is not necessary (this bound is already true)
// where U::T: Foo
{ }
fn bla<U: Bar, V: Bar<T = U::T>>() { }