首页 > 解决方案 > 为什么 rust 说“不受约束的类型参数”,而它似乎是受约束的?

问题描述

有两个现有的结构S1S2<T>和两个特征T1T2<T>。我想T2<T>S1所有T这些实现AsRef<S2<T1>>

我以为我可以写:

struct S1;
struct S2<T>{t:T}

trait T1 {}
trait T2<T> {}

impl <T: AsRef<S2<T1>>> T2<T> for S1 {}

但我收到以下错误(操场):

(dyn T1 + 'static)错误[E0277]:在编译时无法知道类型值的大小

当然,目前还不知道类型的大小!我想为实现 T1 的所有类型创建一个通用实现。所以我尝试了以下方法:

struct S1;
struct S2<T>{t:T}

trait T1 {}
trait T2<T> {}

impl <T,U> T2<T> for S1 
    where T: AsRef<S2<U>>,
          U: T1
{}

但这也不能编译,出现以下错误:

错误[E0207]:类型参数U不受 impl trait、self 类型或谓词的约束

上面的代码有什么问题,如何解决?

标签: genericsrusttraits

解决方案


推荐阅读