代码之家  ›  专栏  ›  技术社区  ›  Joseph Garvin

crust宏能否生成具有拷贝意识的getter?

  •  1
  • Joseph Garvin  · 技术社区  · 6 年前

    derive-getters is a nice crate

    #[derive(Getters)]
    pub struct MyCheesyStruct {
        x: i64,
        y: i64,
    }
    

    它将产生:

    impl MyCheesyStruct {
        pub fn x(&self) -> &i64 {
            &self.x
        }
    
        pub fn y(&self) -> &i64 {
            &self.y
        }
    }
    

    i64 工具 Copy . 所以我开始怀疑是否有可能做得更好?但是宏是在标记级别操作的,所以它们对类型/特性一无所知。除了用指令手动注释成员以指定应该在不使用借阅的情况下返回成员之外,有没有其他方法可以获得此功能?这是C++中擅长的类型级元程序设计。

    0 回复  |  直到 6 年前
        1
  •  0
  •   sergeyt    6 年前

    所以我开始怀疑是否有可能做得更好?

    作为部分答案,我可以说,对于开箱即用的基本类型,这是可行的。对于其他类型,可能需要在字段上添加注释,例如:

    #[derive(Copy)]
    pub struct Point {
      x: i64,
      y: i64,
    }
    
    #[derive(Getters)]
    pub struct MyCheesyStruct {
        #[noref] // generates non-borrow getter
        point: Point,
    }
    

    推荐文章