是否可以创建具有指定关联类型的特征别名?我使用的是类似问题Type alias for multiple traits中的方法

trait Trait {
    type Item;
}

fn print<T>(value: T) where T: Trait<Item=char> {
}

trait Alias: Trait {}
impl<T: Trait<Item=char>> Alias for T {}

fn print_alias<T: Alias>(value: T) {
    print(value)
}

fn main() {
}

但它无法编译,出现以下错误:

<anon>:12:5: 12:10 error: type mismatch resolving `<T as Trait>::Item == char`:
 expected associated type,
    found char [E0271]
<anon>:12     print(value)
              ^~~~~
<anon>:12:5: 12:10 note: required by `print`
<anon>:12     print(value)
              ^~~~~
error: aborting due to previous error

Playpen链接:http://is.gd/LE4h6a

推荐答案

@Shepmaster的解决方案在局部解决了问题;但每次都必须指定where T: Alias<Item=char>.或者,您可以通过要求所有Alias实现Trait<Item=char>来全局解决该问题:

trait Alias: Trait<Item=char> {}
impl<T: Trait<Item=char>> Alias for T {}

Select 哪种全球或本地解决方案完全取决于您.

Rust相关问答推荐

预期 struct VecDeque Student发现 struct VecDeque Student(Student)

Rust,polars CSV:有没有一种方法可以从impll BufRead(或任何字节迭代器)中读取CSV?

如何使用字符串迭代器执行查找?

是否有可能同时避免不兼容的不透明类型和代码重复?

使用极点数据帧时,找不到枚举结果的方法lazy()

如何正确重新排列代码以绕过铁 rust 借入判断器?

如何在不调用Collect()的情况下为新型vec实现IntoIterator?

失真图像图形捕获Api

如何强制匹配的返回类型为()?

当锁被释放时,将锁包装到作用域中是否会发生变化?

返回优化后的标题:返回异步块的闭包的类型擦除

如何在Rust中使用Serde创建一个自定义的反序列化器来处理带有内部标记的枚举

有什么方法可以通过使用生命周期来减轻嵌套生成器中的当生成器产生时borrow 可能仍在使用错误?

Rust Redis 中的 HSET 命令问题

在 Rust 中使用 `SecTrustSettingsSetTrustSettings` 绑定导致 `errSecInternalComponent`

产生拥有值的迭代器的 Rust 可变borrow 在循环中失败

从 Cranelift 发出 ASM

如何在 nom 中构建负前瞻解析器?

为什么这个值在上次使用后没有下降?

传递 Option<&mut T> 时何时需要 mut