我正在阅读特征对象需要对象安全,但我不理解泛型类型参数的问题。
使用 trait 时用具体类型参数填充的泛型类型参数也是如此:具体类型成为实现 trait 的类型的一部分。当通过使用 trait 对象忘记类型时,无法知道用什么类型填充泛型类型参数。
我正在尝试编写一个示例,但我无法理解它。泛型类型参数有什么用?
我试图从参数化特征中创建特征对象,但是一旦为参数赋予了具体值,它就可以正常工作:
trait Creator<T> {
fn create(&self) -> T;
}
struct CreationHouse {
creators: Vec<Box<dyn Creator<u32>>>
}
struct NumCreator { seed: u32 }
impl Creator<u32> for NumCreator {
fn create(&self) -> u32 {
return self.seed;
}
}
fn main() {
let ch = CreationHouse{
creators: vec![Box::new(NumCreator{seed: 3})]
};
}
(编译良好,除了“未使用”警告)
我不明白这是什么意思“使用特征时用具体类型参数填充的泛型类型参数”以及泛型类型如何丢失(因为特征本身“携带”它们)。如果你能写一个段落中描述的案例的例子,我将不胜感激。