我有一个函数,它接受一个特定类型(泛型)的向量作为输入。如果给定类型有一个属性,我想创建一个修改过的版本,并将其写入输出缓冲区。如果类型与用例无关,只需跳过这一步。因此,沿着以下行
use std::io;
pub fn write_obj_to_buf<T>(
obj_vec: &Vec<T>,
output: &mut dyn io::Write,
) -> Result<(), Box<dyn Error>> {
// new_vec = empty vector
// for each element in obj_vec
// if T=something specific -> append to new_vec modified version (how to modify?), else append existing
unsafe {
let buf_view: &[u8] = slice::from_raw_parts(
new_vec.as_ptr() as *const u8,
new_vec.len() * mem::size_of::<T>(),
);
output.write_all(buf_view)?;
}
Ok(())
}
在Rust中,有什么惯用的方法可以做到这一点?我是泛型的新手,不确定std::any::Any
是否与此相关?
1条答案
按热度按时间zwghvu4y1#
在这种情况下,惯用的方法是描述你所有的类型集,并为它实现trait。如果你不需要为一些类型做,只是仍然为空实现。参见示例:
另一种方法是创建包含所有类型的
enum MyEnum
并实现其行为。例如: