小编mus*_*hin的帖子

如何避免将具体结构更改为泛型而产生连锁反应?

我有一个看起来像这样的配置结构:

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都必须更改它: …

generics traits rust

2
推荐指数
2
解决办法
316
查看次数

标签 统计

generics ×1

rust ×1

traits ×1