我正在为一个数据库项目工作设计类型系统。其中一个问题是将类型ID映射到读取器,给定类型ID和地址,函数可以返回从内置、到定义的结构体等任何数据类型。
对于写入器,例如宏之类的我没有任何问题。
fn set_val (data: &Any, id:i32, mem_ptr: usize) {
match id {
$(
$id => $io::write(*data.downcast_ref::<$t>().unwrap(), mem_ptr),
)*
_ => (),
}
}
但对于读者来说,Any
作为返回值似乎不太舒适,因为 trait bound "std::any::Any + 'static: std::marker::Sized" is not satisfied
。我也尝试过返回引用,但是碰到了生命周期的问题。
fn get_val (id:i32, mem_ptr: usize) -> Option<& Any> {
match id {
$(
$id => Some(&$io::read(mem_ptr)),
)*
_ => None,
}
}
出现了 missing lifetime specifier
的错误提示。如果由于返回值的生命周期不够长而无法在此处使用 'static
,那么我该如何指定生命周期呢?
PS. $io 的 read 函数返回任何类型。