通过结构体成员委托实现Trait,是否有现成Rust宏 crate?
可用的Rust委托宏Crates
- delegate:这是专门处理trait方法委托的常用过程宏crate,能自动生成结构体的trait实现并将所有方法委托给指定成员。
针对你的SectoredStream结构体实现Read trait的示例:
use delegate::delegate; use std::io::{Read, Result}; struct SectoredStream<T> { sector_sz: usize, inner: T, } delegate! { impl<T: Read> Read for SectoredStream<T> { // 只需声明要委托的trait方法,宏会自动生成委托实现 fn read(&mut self, buf: &mut [u8]) -> Result<usize>; // Read的其他方法(如read_to_end、read_exact等)也会被自动委托,无需逐个声明 } }
- derive_delegate:另一个可选crate,通过derive属性实现委托,写法更简洁:
use derive_delegate::Delegate; use std::io::Read; #[derive(Delegate)] #[delegate(Read)] struct SectoredStream<T> { sector_sz: usize, // 指定该成员为委托目标 #[delegate(target)] inner: T, }
这两个crate都能处理复杂trait的委托场景,彻底省去手动编写样板代码的麻烦。
内容的提问来源于stack exchange,提问作者UserSpaceMan
相关产品推荐
相关产品推荐

