小编CSa*_*San的帖子

通用类型引用的Rust约束

这是场景:我有一个结构和特征对,如下所示:

trait Operation {
    fn operation(self) -> u32
}

struct Container<T: Sized + Operation> {
    x:T
}

impl <T: Sized + Operation> for Container<T> {
    fn do_thing(&self) -> u32 {
        // Do something with the field x.
    }
}
Run Code Online (Sandbox Code Playgroud)

无论何时使用,该操作都需要按值传递,并且问题与"do_thing"类似.我宁愿不必为该类型强制执行复制语义,T并希望为此解决此问题.基本上我想知道以下内容:

  1. 是否可以对类型参数的引用强制执行特征约束?有点像:struct Container<T: Sized + Operation> where &T: Operation { ... }.我尝试了一下语法,但我没有取得任何成功.
  2. 如果以上目前不可能,理论上是否可行; 即它不违反任何要求的连贯属性或沿着这些线的东西?
  3. 是否有可能创建第二个特点,比如说Middle: Operation,在那里Middle可以要求任何实施者Middle,T,也需要实现Operation&T.
  4. 如果以上都不可能,还有其他一些常见的解决方法吗?

一些说明:

  • 我没有权限改变这个Operation特性,它是给定的,这就是我要使用的东西.
  • 有一个旧的RFC讨论对where子句的一些修改,但我没有找到任何与引用约束相关的内容.
  • 编译器版本: …

generics reference constraints rust

6
推荐指数
1
解决办法
1981
查看次数

标签 统计

constraints ×1

generics ×1

reference ×1

rust ×1