假设有一个集合trait,它的项有一个关联的类型:
trait CollectionItem {
// ...
}
trait Collection {
type Item: CollectionItem;
fn get(&self, index: usize) -> Self::Item;
// ...
}
我能不能把它类型擦除到一个对Collection
和CollectionItem
trait都使用动态调度的类型中?也就是说,把它 Package 成如下所示的形式:
struct DynCollection(Box<dyn Collection<Item=Box<dyn CollectionItem>>>);
impl DynCollection {
fn get(&self, index: usize) -> Box<dyn CollectionItem> {
// ... what to do here?
}
}
impl <C: Collection> From<C> for DynCollection {
fn from(c: C) -> Self {
// ... what to do here?
}
}
1条答案
按热度按时间bvjveswy1#
你可以添加一个私有的、类型擦除的辅助特征:
然后使用以下代码构建一个 Package 器类型: