你需要
clone
为了实现这一点,您想要返回的对象。这也意味着
T
Clone
pub struct Foo<T: Clone> {
memory: Vec<T>
}
impl<T> Foo<T> where T:Clone {
pub fn set(&mut self, value: T) {
self.memory.push(value);
}
pub fn get(&self, index: usize) -> Option<T> {
Some(self.memory[index].clone())
}
}
如果这涉及到可以完全返回的对象(与向量的元素不同),可以创建一个移动对象的方法,如下所示:
pub struct Foo<T> {
memory: T
}
impl<T> Foo<T> {
pub fn get(self) -> Option<T> {
Some(self.memory)
}
}
&self
,但只是
self
,因此所有权将被转移。
您还可以考虑实施
Copy
对于
T
在这种情况下,它将作为值传递给函数,而不是像基元类型那样的引用,例如。
i32
:
pub struct Foo<T: Copy> {
memory: Vec<T>
}
impl<T> Foo<T> where T:Copy {
pub fn set(&mut self, value: T) {
self.memory.push(value);
}
pub fn get(&self, index: usize) -> Option<T> {
Some(self.memory[index].clone())
}
}
然而,对于内存密集型对象或其所有权因任何原因应被保留/保护的对象,我不建议这样做。