gpt4 book ai didi

rust - 不同结构的实例作为函数的参数

转载 作者:行者123 更新时间:2023-11-29 08:14:56 24 4
gpt4 key购买 nike

有一些结构:

struct St1 {
..
}

impl St1 {
pub fn new() -> St1 {
//.......
}
}

struct St2 {
..
}

impl St2 {
pub fn new() -> St2 {
//.......
}
}

//and so on

在继承方面彼此没有关系,它们不实现任何公共(public)接口(interface)。我想创建一个接受以下任何结构的实例的函数:

fn my_func(???) { .... }

我该怎么做?我正在考虑创建一个枚举:

enum MyEnum {
St1::new(), //error!
St2::new() //error!
}

// and then
fn my_func(en: MyEnum) { .... }

但是如您所见,它不起作用。你的想法?

请注意,结构 S1、S2、S3 来自库,因此我无法更改它们。

最佳答案

要创建枚举,您宁愿这样做:

enum MyEnum {
MySt1(St1),
MySt2(St2)
}

也就是说,它有两个变体,每个变体携带各自类型的数据。

如果您不关心您拥有的哪个变体,另一种方法是定义您自己的特征并为两者实现它:

trait Stuff { }
impl Stuff for St1 { }
impl Stuff for St2 { }

fn my_func<T: Stuff>(en: T) { ... }

这样做的好处是不必重复处理和添加枚举。这称为“扩展实现”,因为您正在扩展具有它未曾实现的特征的类型。

关于rust - 不同结构的实例作为函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26758010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com