Inheritance 用合成法模拟场继承

Inheritance 用合成法模拟场继承,inheritance,struct,enums,rust,composition,Inheritance,Struct,Enums,Rust,Composition,我有几对结构,其中一个的字段是另一个的完美超集。我想模拟某种类型的继承,这样我就不必为每个结构都有单独的案例,因为这几乎会使我的代码翻倍 在像C这样的语言中,我可以用如下方式模拟字段的继承: 结构A { INTA; }; 结构B { 构造父对象; int b; }; main() { 结构B测试1; 结构A*test2=&test1; test2->a=7; } 我想在Rust做类似的事情。我读过类似的东西,但当我尝试它时,它似乎还没有实现。有没有办法在没有单独的案例处理的情况下在另一个结构中

我有几对结构,其中一个的字段是另一个的完美超集。我想模拟某种类型的继承,这样我就不必为每个结构都有单独的案例,因为这几乎会使我的代码翻倍

在像C这样的语言中,我可以用如下方式模拟字段的继承:

结构A { INTA; }; 结构B { 构造父对象; int b; }; main() { 结构B测试1; 结构A*test2=&test1; test2->a=7; } 我想在Rust做类似的事情。我读过类似的东西,但当我尝试它时,它似乎还没有实现。有没有办法在没有单独的案例处理的情况下在另一个结构中重用结构中的字段

以下是我尝试的枚举语法:

enum Top
{
    a: i32,
    A {},
    B {
        b: i32
    }
}
这是我的错误:

错误:应为“(”、“=”、“{”或“}”之一,找到“:`
-->src/main.rs:3:6
|
3 | a:i32,
|^此处应为“(”、“、=”、“{”或“}”之一

对于一些示例执行。

从Rust 1.22开始,枚举中公共字段的建议语法尚未实现。目前唯一的选项是简单的旧组合。如果您希望能够对包含
A
的多个类型进行一般操作,您可以定义一个特性,提供对该
A
的访问并在所有这些类型上实现它:

trait HaveA {
    fn a(&self) -> &A;
    fn a_mut(&mut self) -> &mut A;
}

impl HaveA for B {
    fn a(&self) -> &A {
        &self.parent
    }

    fn a_mut(&mut self) -> &mut A {
        &mut self.parent
    }
}

“当我尝试时,它似乎还没有实现”想和大家分享一下你的尝试吗?你遇到的错误?把它戴上,这样其他人也可以运行它。我投了赞成票,因为它可以解决问题,但我坚持选择它作为解决方案,因为似乎应该有更好的方法。我想我期待着对系统编程语言进行更严格的控制。