Generics 访问泛型结构中的字段
给定此结构:Generics 访问泛型结构中的字段,generics,rust,Generics,Rust,给定此结构: pub struct A { pub C: B, } 我正在寻找使用A元素创建防锈容器,并在该通用防锈容器中访问A.C。这是这样一个容器: 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 ge
pub struct A {
pub C: B,
}
我正在寻找使用A
元素创建防锈容器,并在该通用防锈容器中访问A.C
。这是这样一个容器:
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
}
}
我想实例化一个泛型类型,如下所示:
设h:MyArray=MyArray(6)代码>
设d:MyArray=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));
}
pub struct MyVec您可以将要访问的字段的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));
}
pub struct MyVec如果我猜对了,你想要什么是一种特质,但你的问题很不清楚,目前在struct a
和struct MyArray
之间没有联系。A也不是结构的合适名称。我相信您的问题已由的答案回答。如果你不同意,请用你的问题来解释不同之处。否则,我们可以将此问题标记为已回答。TL;重复博士:不,你不能访问通用结构中的字段。好的,编辑问题。这与特性案例有点不同,因为我需要实例化一个类型。@ SePMeMe:我的理解是OP在C++中寻找指向成员指针的东西。在C++中你可以实例化一个模板<代码> MyReals。如果你猜的话,你想要的是一个特性,但是你的问题很不清楚,在<代码>结构> < />代码>和<代码>结构MyLabe>代码>之间没有链接。A也不是结构的合适名称。我相信您的问题已由的答案回答。如果你不同意,请用你的问题来解释不同之处。否则,我们可以将此问题标记为已回答。TL;重复博士:不,你不能访问通用结构中的字段。好的,编辑问题。这与特性案例有点不同,因为我需要实例化一个类型。@ SePMeMe:我的理解是OP在C++中寻找指向成员指针的东西。在C++中,可以实例化模板<代码> MyReals。