【问题标题】:Rust meta / compound structs with marker traits具有标记特征的 Rust 元/复合结构
【发布时间】:2020-06-23 02:42:37
【问题描述】:

我有多个现有结构,我想使用具有共享“主题”(每个主题发布一个类型)的 pubsub 机制在代码上下文之间共享它们。许多主题重用相同的结构类型,因此我想以某种方式标记原始结构以将它们重用于这些主题。比如:

trait TopicMeta {
    const TOPIC: &'static str;
}

struct Point {
    x: u32,
    y: u32,
}

impl TopicMeta for Point as HomeLocation  {
    const TOPIC: &'static str = "home";
}

impl TopicMeta for Point as RoverLocation  {
    const TOPIC: &'static str = "rover";
}

但是,据我所知,没有办法做到这一点?

其他选项:

  • 我可以为每个主题创建一个新类型,与原来的 Point 结构相同,只是名称不同。
  • 我可以为每个主题创建一个包装对象,其中包含一个包含点的内部字段。

有什么建议吗?

【问题讨论】:

    标签: generics rust traits


    【解决方案1】:

    执行此操作的常见方法是在您的类型中添加一个字段并使用单元struct 作为标签:

    trait TopicMeta {
        const TOPIC: &'static str;
    }
    
    struct Point<T> {
        x: u32,
        y: u32,
        tag: T,
    }
    
    struct HomeLocation;
    struct RoverLocation;
    
    impl TopicMeta for Point<HomeLocation> {
        const TOPIC: &'static str = "home";
    }
    
    impl TopicMeta for Point<RoverLocation> {
        const TOPIC: &'static str = "rover";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 2017-06-24
      • 2022-10-24
      相关资源
      最近更新 更多