Inheritance 如果Self只是一个特征的类型参数,那么是否有可能继承该特征?

Inheritance 如果Self只是一个特征的类型参数,那么是否有可能继承该特征?,inheritance,rust,traits,Inheritance,Rust,Traits,我想要求实现traitA需要f64实现Add。我们可以称之为反向特征遗传 我可以使用一个where子句来实现这一点,但这有一个缺点,每次我想使用trait时,我都必须在函数的where子句中添加这个条件 我在下面添加了一个简单的例子来说明这个问题。我想删除的条件用注释标记。你可以把它当作一个游乐场 使用std::ops::Add; #[派生(复制、克隆、调试)] 结构编号(f64); 为Num添加impl{ 类型输出=Num; fn add(self,rhs:Num)->self::Output

我想要求实现trait
A
需要
f64
实现
Add
。我们可以称之为反向特征遗传

我可以使用一个
where
子句来实现这一点,但这有一个缺点,每次我想使用trait时,我都必须在函数的
where
子句中添加这个条件

我在下面添加了一个简单的例子来说明这个问题。我想删除的条件用注释标记。你可以把它当作一个游乐场

使用std::ops::Add;
#[派生(复制、克隆、调试)]
结构编号(f64);
为Num添加impl{
类型输出=Num;
fn add(self,rhs:Num)->self::Output{
Num(self.0+rhs.0)
}
}
为Num添加impl{
类型输出=Num;
fn add(self,rhs:f64)->self::Output{
Num(self.0+rhs)
}
}
f64的impl Add{
类型输出=Num;
fn add(self,rhs:Num)->self::Output{
Num(self+rhs.0)
}
}
特征添加F64:添加+添加+复制
其中f64:添加,
{}
T的impl AddF64
哪里
T:添加+添加+复制,
f64:添加
{}
fn-foo(x:T,y:T)->T
其中f64:Add//我想删除此行!
{
1.0+x+y
}
fn main(){
设n=Num(1.0);
设res=foo(n,n);
println!(“{:?}”和&res);
}

我很确定这个问题应该已经被问过了,但我什么也没发现。

我想你需要等待或降落来删除这条线。@kennytm谢谢你的提示。我将跟踪这两个功能的进度。
use std::ops::Add;

#[derive(Copy, Clone, Debug)]
struct Num(f64);

impl Add for Num {
    type Output = Num;
    fn add(self, rhs: Num) -> Self::Output {
        Num(self.0 + rhs.0)
    }
}

impl Add<f64> for Num {
    type Output = Num;
    fn add(self, rhs: f64) -> Self::Output {
        Num(self.0 + rhs)
    }
}

impl Add<Num> for f64 {
    type Output = Num;
    fn add(self, rhs: Num) -> Self::Output {
        Num(self + rhs.0)
    }
}

trait AddF64 : Add<Output=Self> + Add<f64, Output=Self> + Copy
    where f64: Add<Self, Output=Self>,
{}

impl<T> AddF64 for T
where
    T: Add<Output=T> + Add<f64, Output=T> + Copy,
    f64: Add<T, Output=T>
{}

fn foo<T: AddF64>(x: T, y: T) -> T
where f64: Add<T, Output=T> // I would like to remove this line!
{
    1.0 + x + y
}

fn main() {
    let n = Num(1.0);
    let res = foo(n, n);
    println!("{:?}", &res);
}