示例:给出以下特征,
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;
}
但我无法理解如何以相同的方式为泛型类型提供实现,如果可能的话。
答案 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>
作品。