У меня есть перечисление, варианты которого содержат структуры с немного отличающимися сигнатурами типов.Моя цель - написать единственный метод моего enum MyEnum
, который возвращает ссылку на структуру, связанную с каждым вариантом, независимо от варианта.Я могу написать отдельные методы, которые делают это для каждого варианта, но мне было интересно, позволит ли использование дженериков написать один метод для всех вариантов.Я успешно реализовал обобщения для сигнатуры структуры, но у меня возникли проблемы с применением этой концепции к методу enum.Вот пример:
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"),
}
}
}
Это не компилируется, сообщая, что он ожидал, что будет возвращен параметр типа.Как мне поступить так, чтобы получить поведение, которое я ищу?