This question already has answers here:
Is there any way to create a type alias for multiple traits?

(2个答案)


4年前关闭。




是否可以使用指定的关联类型创建特征别名?我正在使用来自类似问题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

游戏围栏链接: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 {}

哪种方案更适合您,完全取决于您。

关于rust - 具有关联类型的别名特征,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30424100/

10-12 01:40