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>>() { }