Я работаю над системой типов для проекта базы данных. Одна из проблем заключается в сопоставлении идентификатора типа с читателем, который задает идентификатор и адрес типа, функция может возвращать заданный тип данных из встроенных u32
, String
в определенные структуры.Как вернуть Any из функции?
У меня нет каких-либо проблем на писателей, как такой макрос
fn set_val (data: &Any, id:i32, mem_ptr: usize) {
match id {
$(
$id => $io::write(*data.downcast_ref::<$t>().unwrap(), mem_ptr),
)*
_ =>(),
}
}
Но для читателя Any
кажется не очень удобно использовать в качестве возвращаемого значения, так как the 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 возвращает любые типы типов.