我有一个看起来像这样的配置结构:
struct Conf {
list: Vec<String>,
}
Run Code Online (Sandbox Code Playgroud)
该实现是在内部填充该list成员的,但是现在我决定将该任务委托给另一个对象。所以我有:
trait ListBuilder {
fn build(&self, list: &mut Vec<String>);
}
struct Conf<T: Sized + ListBuilder> {
list: Vec<String>,
builder: T,
}
impl<T> Conf<T>
where
T: Sized + ListBuilder,
{
fn init(&mut self) {
self.builder.build(&mut self.list);
}
}
impl<T> Conf<T>
where
T: Sized + ListBuilder,
{
pub fn new(lb: T) -> Self {
let mut c = Conf {
list: vec![],
builder: lb,
};
c.init();
c
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,但是现在我在所有使用的地方Conf都必须更改它: …