我想要一个DataAllocator可以返回具有生命周期的数据的数据'r,这样我就可以将它传递给something并且仍然能够返回内部分配的值something:
use std::marker::PhantomData;
pub struct Data<'a, T>{
a: &'a [T]
}
impl<'a, T> Data<'a, T> {
pub fn new() -> Data<'a, T> {
todo!()
}
fn iter(&'a self) -> Iter<'a, T> {
todo!()
}
}
pub struct Iter<'a, T> {
_phantom: PhantomData<&'a T>
}
impl<'a, T> Iterator for Iter<'a, T> {
type Item = &'a T;
fn next(&mut self) -> Option<Self::Item> {
todo!()
}
}
pub trait DataAllocator<'s, 'r, T> {
fn allocate(&'s self) -> Box<dyn AsRef<[T]> + 'r>;
}
impl<'s, 'r, T> DataAllocator<'s, 'r, T> for Data<'r, T> {
fn allocate(&'s self) -> Box<dyn AsRef<[T]> + 'r> {
todo!()
}
}
fn do_something<'a, 'b, T>(data_allocator: &'a dyn DataAllocator<'a, 'b, T>) -> Data<'b, T> {
let buffer = data_allocator.allocate();
let data = Data{a: (*buffer).as_ref()};
for e in data.iter(){}
data
}
Run Code Online (Sandbox Code Playgroud)
error[E0515]: cannot return value referencing local data `*buffer`
--> src/lib.rs:42:5
|
40 | let data = Data{a: (*buffer).as_ref()};
| ------------------ `*buffer` is borrowed here
41 | for e in data.iter(){}
42 | data
| ^^^^ returns a value referencing data owned by the current function
Run Code Online (Sandbox Code Playgroud)
问题是,如果我尝试迭代data,那么它会抱怨我正在尝试返回函数借用的东西.iter()。.iter()我认为这可能与我所说的借用Data生命周期有关'b,这是分配数据的整个生命周期。这种情况我能做什么?
| 归档时间: |
|
| 查看次数: |
311 次 |
| 最近记录: |