我想创建一个包含结构体类型(非实例化)的数组,它们都实现了相同的trait。我尝试过这样做:
trait TraitA {
fn new(number: i16) -> Self;
fn get_name() -> &'static str;
}
struct StructA {
bar: u8
}
struct StructB {
foo: i16
}
impl TraitA for StructA {
fn new(number: i16) -> Self {
StructA { bar: number as u8 }
}
fn get_name() -> &'static str
{ "StructA" }
}
impl TraitA for StructB {
fn new(number: i16) -> Self {
StructB { foo: number }
}
fn get_name() -> &'static str
{ "StructB" }
}
fn main() {
let struct_array = [StructA, StructB];
for i in 0..struct_array.len() {
println!("{}", struct_array[i]::get_name());
struct_array[i]::new(i);
}
}
编译器期望的是实际值,而不是类型。
在Python中,我会这样做:
class ClassA:
def __init__(self, number):
self.bar = number
def get_name():
return "ClassA"
class ClassB:
def __init__(self, number):
self.foo = number
def get_name():
return "ClassB"
if __name__ == "__main__":
class_array = [ClassA, ClassB]
for i in range(2):
print(class_array[i].get_name())
class_array[i](i)
我怎样才能实现这个?
Factory
特质或类,将所有的静态方法实现为非静态方法。然后只需保留一个Box<dyn Factory>
向量即可。 - rodrigo