2016-03-11 52 views
0

示例:給出的以下性狀,使用泛型時可以使用自引用關聯類型嗎?

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

http://is.gd/9qyS95 –

回答

0

這最終是一個編程錯誤的情況。正如@ChrisMorgan指出in his example,表達式Add<Output = V>確實編譯。編譯器哀嚎的原因是在生產源代碼Output = V中的一個位置沒有一直添加。

遺憾的是,編譯濃縮MWE時,我一定也犯了一些錯誤。

於是,外賣留給後人的是,

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

作品。

相關問題