使用泛型时是否可以使用自引用关联类型?

时间:2016-03-11 22:34:24

标签: generics rust traits associated-types

示例:给出以下特征,

trait DirectedAcyclicGraph<V, E> where V: Add, E: Add

我希望只要类型V的值为相同类型的值,就会返回另一个类型V的值。每当将E类型的值添加到同一类型的另一个值时,我希望返回另一个E

天真地,我认为这可能是正确的方向,

trait DirectedAcyclicGraph<V, E> where V: Add<Output = V>, E: Add<Output = E>

但这只是在黑暗中拍摄的。

Add的文档提供了以下示例

use std::ops::Add;

struct Foo;

impl Add for Foo {
    type Output = Foo;

    fn add(self, _rhs: Foo) -> Foo {
        println!("Adding!");
        self
    }
}

fn main() {
    Foo + Foo;
}

但我无法理解如何以相同的方式为泛型类型提供实现,如果可能的话。

1 个答案:

答案 0 :(得分:0)

最终出现编程错误。正如@ChrisMorgan指出in his example,表达式Add<Output = V>确实编译。编译器哭泣的原因是在生产源代码Output = V中的一个位置没有一直添加。

遗憾的是,编译精简MWE时我一定也犯了一些错误。

所以,后人的外卖就是那个

trait DirectedAcyclicGraph<V, E> where V: Add<Output = V>, E: Add<Output = E>

作品。