#self #duplicate #signature #box #macro #consume

过程宏 box-self

轻松复制具有self: Box签名的函数

6个版本

0.1.5 2023年8月24日
0.1.4 2023年8月24日
0.1.3 2022年10月7日

#548 in 过程宏

MIT/Apache

11KB
72 代码行

box-self

轻松复制具有self: Box<Self>签名的函数。

有时你需要同时使用函数fn consume(self)fn consume_boxed(self: Box<Self>)。此宏为你生成第二个。

示例

   use box_self::box_self;

   trait Animal {
       fn consume(self);
       fn consume_boxed(self: Box<Self>);
   }

   struct Dog{}
   impl Animal for Dog{
       #[box_self(_boxed)]
       fn consume(self) {
           println!("Bark");
       }
   }

   struct Cat{}
   impl Animal for Cat{
       #[box_self(_boxed)]
       fn consume(self) {
           println!("Jump");
       }
   }

   fn main(){
       let animals:Vec<Box<dyn Animal>>=
            vec![Box::new(Dog{}), Box::new(Cat{})];

       for anim in animals{
           anim.consume_boxed();
       }
   }



动机


许可证

LICENSE-APACHELICENSE-MIT中选择一个许可证。


除非你明确指出,否则根据Apache-2.0许可证,你提交给此crate的任何有意贡献都将双重许可,如上所述,没有其他条款或条件。

许可证:MIT OR Apache-2.0

依赖项

~3.5–10MB
~93K SLoC