重新定义中缀运算符的特征

时间:2015-06-24 16:20:50

标签: rust traits infix-operator

我正在尝试重新定义Add特征,以便我可以将其用作中缀运算符:

//use std::ops::Add;

trait Add<RHS=Self> {
    // type Output;

    fn add(self, rhs: RHS) -> Self;
}

fn summ<T: Add>(a: T, b: T) -> T {  
    a+b
}  // doesn't compile 

是否可以重新定义Add特征,以便它使用+运算符来添加功能?

1 个答案:

答案 0 :(得分:4)

无法重新定义任何特征。您可以使用相同的名称和相同的方法创建自己的特征,这就是您所做的。但是,运营商+std::ops::Add绑定,因此在这种情况下它不会有用。

在您的情况下,您似乎只想指定Add::Output来返回T

use std::ops::Add;

fn summ<T>(a: T, b: T) -> T
    where T: Add<Output = T>
{  
    a + b
}