Inheritance 如果Self只是一个特征的类型参数,那么是否有可能继承该特征?
我想要求实现traitInheritance 如果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
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);
}