通常返回对嵌套在枚举中的结构的引用

时间:2019-05-14 13:07:27

标签: rust

我有一个枚举,其变体包含类型签名稍有不同的结构。我的目标是编写枚举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"),
        }
    }
}

这不能编译,报告它期望返回一个类型参数。我应该如何处理才能得到我想要的行为?

0 个答案:

没有答案