generics - 为什么 rust 说“不受约束的类型参数”,而它似乎是受约束的?
问题描述
有两个现有的结构S1
和S2<T>
和两个特征T1
和T2<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 类型或谓词的约束
上面的代码有什么问题,如何解决?
解决方案
推荐阅读
- r - 如何从分类数据中删除 NA?
- c# - .net Core 3.1 返回空的 JObject
- bash - 如何重写一个糟糕的 shell 脚本来理解如何执行类似的任务?
- entity-framework - efcore 为客户和员工提供身份
- redis - 如何在整个redis数据库中搜索字符串?
- python - 通过 HTML 表单向 python 函数发送 POST 请求
- sql - 根据条件过滤外连接中的记录
- javascript - Javascript双箭头函数
- strapi - 关闭 Strapi 项目后如何打开它?
- java - 我在使用 @EnableWebSecurity 注释时遇到问题。即使我添加了它的依赖,它也会变成红色