假设我已经Group通过所有组操作定义了一个特征。是否可以创建一个包装器AGroup而Group无需手动派生其所有操作?
基本上,我想要这个:
#[derive (Copy, Debug, Clone, Eq, PartialEq, Group)] // How could I derive Group here as well?
struct AGroup<G: Group>(G);
Run Code Online (Sandbox Code Playgroud)
没有所有这些样板:
impl<G: Group> Add for AGroup<G>{
type Output = AGroup<G>;
fn add(self, other: Self) -> Self {
AGroup(self.0 + other.0)
}
}
impl<G: Group> Neg for AGroup<G>{
type Output = AGroup<G>;
fn neg(self) -> Self {
AGroup(-self.0)
}
}
...
Run Code Online (Sandbox Code Playgroud)
您还可以创建一个公开内部对象接口的方法:
pub trait Group {
fn foo(self: &Self){
println!("Called from group")
}
}
#[derive (Copy, Debug, Clone, Eq, PartialEq)] // How could I derive Group here as well?
pub struct AGroup<G: Group>(G);
impl<G: Group> AGroup<G> {
pub fn inner(&self) -> &impl Group {
&self.0
}
}
pub struct Test {}
impl Group for Test {}
fn main( ) {
let a = AGroup( Test {} );
a.inner().foo();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2100 次 |
| 最近记录: |