Rust 是否将结构作为参数的泛型函数?

Rust 是否将结构作为参数的泛型函数?,rust,Rust,如何创建一个泛型some\u helper\u函数函数,其参数可以具有多个派生数据类型,如Item2或Item1?在您的示例中,Item1和Item2之间没有关系,Rust的泛型也不是duck类型,类似C++模板或Python函数是.< /P> 如果你想让一个函数在几种类型上工作,方法通常是使它通用,并具有一些特性来定义这些类型的共同点: struct Item1 { a: u32, } struct Item2 { a: u32, b: u32, } fn some

如何创建一个泛型
some\u helper\u函数
函数,其参数可以具有多个派生数据类型,如
Item2
Item1

在您的示例中,
Item1
Item2
之间没有关系,Rust的泛型也不是duck类型,类似C++模板或Python函数是.< /P> 如果你想让一个函数在几种类型上工作,方法通常是使它通用,并具有一些特性来定义这些类型的共同点:

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.
}
trait HasA{
fn get_a(&self)->u8;
}
项目1的impl HasA{
fn获取_a(&self)->u8{
赛尔夫
}
}
项目2的impl HasA{
fn获取_a(&self)->u8{
赛尔夫
}
}
fn某些辅助功能(项目:T){
println!(`item.a`的值为{},item.get_a());
}

trait已经有了字段,这将允许您使用generic中的
item.a
(您仍然需要为每种类型实现trait)。但它被推迟了。看来这项提案的收益太少,有些问题没有得到解决,而且它也没有被视为优先事项。

您可能会发现这项提案很有用
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());
}