我有一个枚举,其变体包含类型签名稍有不同的结构。我的目标是编写枚举MyEnum
的单个方法,该方法返回对与每个变体相关联的结构的引用,无论变体如何。我可以编写为每个变体执行此操作的单个方法,但是想知道是否使用泛型可以让我为所有变体编写一个方法。我已经成功实现了结构签名的泛型,但是在将此概念应用于枚举方法时遇到了麻烦。这是一个示例:
struct MyStruct<String, T> {
field1: String,
field2: T,
}
enum MyEnum {
Variant1(MyStruct<String, bool>),
Variant2(MyStruct<String, String>),
}
impl MyEnum {
// This method would return a reference a particular variant, ie Variant1
fn ref_to_variant_one(&self) -> &MyStruct<String, bool> {
if let &MyEnum::Variant1(s) = &self {
s
} else {
panic!("About this");
}
}
// I want to write something like this that would return a reference to either variant
fn ref_to_any_variant<T>(&self) -> &MyStruct<String, T> {
match &self {
&MyEnum::Variant1(s) => s,
&MyEnum::Variant2(s) => s,
_ => panic!("About this"),
}
}
}
这不能编译,报告它期望返回一个类型参数。我应该如何处理才能得到我想要的行为?