gpt4 book ai didi

generics - 访问通用结构中的字段

转载 作者:行者123 更新时间:2023-11-29 08:26:46 25 4
gpt4 key购买 nike

给定这个结构:

pub struct A {
pub C: B,
}

我正在寻找包含 A 元素的 Rust 容器, 并访问 A.C在那个通用的 Rust 容器中。这是这样一个容器:

pub struct MyArray<A, C> {
data: Vec<A>,
size: usize,
}

impl<A, C> MyArray {
// Access the value in the ith element of data
pub fn get_value(self, i: u64) -> u64 {
self.data[i].C
}
}

给定以下结构:

pub struct House {
pub num_rooms: u64,
}

我想像这样实例化一个泛型类型:

let h: MyArray<House, num_rooms> = MyArray(6);

let d: MyArray<Cat, num_lives> = MyArray(10);

然后我希望能够调用 h.func(5)获取 Rust 容器第 6 个元素中指定字段的值。

我不确定这是否可行。如果是,则可能需要宏/泛型。

最佳答案

您可以为要访问的字段存储一个 getter 函数,例如,

pub struct MyVec<A, G> {
data: Vec<A>,
getter: G,
}

impl<A, G, T> MyVec<A, G>
where
G: Fn(&A) -> T,
{
pub fn get_value(&self, i: usize) -> T {
(self.getter)(&self.data[i])
}
}

struct Wobble {
gloink: u64,
}

impl Wobble {
fn gloink(&self) -> u64 {
self.gloink
}
}

fn main() {
let v = MyVec {
data: vec![Wobble { gloink: 42 }],
getter: Wobble::gloink,
};
println!("{}", v.get_value(0));
}

Playground

关于generics - 访问通用结构中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53094222/

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