【发布时间】:2021-06-30 22:35:53
【问题描述】:
我有多种类型和一个枚举:
struct Foo;
struct Bar;
enum MyEnum {
Foos(Vec<Foo>),
Bars(Vec<Bar>),
}
有没有办法为此创建一个通用的.push 方法,比如
impl MyEnum {
fn push<T>(&mut self, item: T) {
if item.type_id() == TypeId::of::<Foo>() {
if let MyEnum::Foos(ref mut vec) = self {
vec.push(item); // doesn't compile because item is generic type `T` instead of `Foo`
}
} else if item.type_id == TypeId::of::<Bar>() {
if let MyEnum::Bars(ref mut vec) = self {
vec.push(item);
}
}
}
}
这不会编译,因为 .push 只看到泛型类型 T,而不是它所期望的类型。
有没有办法做到这一点?
【问题讨论】:
-
如果
T是self的错误类型怎么办? -
该方法会返回错误,为简洁起见,我将其省略