以struct作为参数的泛型函数?

问题描述 投票:0回答:1
struct Item1 {
    a: u32,
}

struct Item2 {
    a: u32,
    b: u32,
}

fn some_helper_function(item: Item1) {
    // Basically `item` could be of type `Item1` or `Item2`.
    // How I create generic function to take any one of them?
    // Some implementation goes here.
}

如何创建一个通用的some_helper_function函数,其参数可以具有多个派生数据类型,例如Item2Item1

rust
1个回答
1
投票

在您的示例中,Item1Item2之间没有关系,并且Rust的泛型不是鸭式的,就像C ++模板或Python函数一样。

如果您希望函数可以在几种类型上使用,通常的方法是使其具有通用性,并具有定义这些类型的共同点的特征:

trait HasA {
    fn get_a(&self) -> u8;
}

impl HasA for Item1 {
    fn get_a(&self) -> u8 {
        self.a
    }
}

impl HasA for Item2 {
    fn get_a(&self) -> u8 {
        self.a
    }
}

fn some_helper_function<T: HasA>(item: T) {
    println!("The value of `item.a` is {}", item.get_a());
}

已经有a proposal具有用于特征的字段,这将使您可以使用泛型中的item.a(您仍然必须为每种类型实现特征)。但这已被推迟。看来,这项提议的收获太少,一些问题尚未解决,因此它并不被视为优先事项。

© www.soinside.com 2019 - 2024. All rights reserved.