【发布时间】:2023-03-22 07:58:01
【问题描述】:
我的目的是创建一个结构,该结构包含对另一个类似类型的引用,但具有不同的泛型以用作链接对象链。
问题是不允许使用_ 占位符写这个:
the type placeholder `_` is not allowed within types on item signatures
我不能简单地给我的结构另一个类型参数,因为被引用的对象也可能引用另一个对象,依此类推。这样会导致类型参数非常多,不实用。
我想找到一种方法来更改此实现以使其工作:
// The type parameters are:
// O: this Router's data type
// B: The parent router's data type
pub struct DataRouter<'a, O, B = O>
where
O: 'a,
B: 'a,
{
parent: Option<&'a DataRouter<'a, B, _>>, // Here the problem `_`
range: Option<Range<usize>>,
data: Option<O>,
}
我不能简单地将参数放在这里,因为我必须将它添加到结构中,然后会导致添加类型参数的相同无限循环。
有没有办法使用B 数据类型保存对DataRouter 的引用,该数据类型本身保存对具有未知数据类型的父DataRouter 的引用?结构必须只知道直接父数据类型,而不是第二个父数据类型。
如果无法解决此问题,您能否提出一个可行的不同实施方案?
【问题讨论】:
-
你打算用
parent做什么,需要你知道它的父母的类型? -
我的意图是能够让父级将 DataRouters 用作链。基本上我只是希望能够使用getter 方法返回
parent,这样我就可以从构建链的地方使用它。每个 DataRouter 都会在那里处理数据并返回它;然后将数据传递给最后一个路由器的父级,并再次进行处理;以此类推,直到链结束(无而不是Some(parent))。
标签: generics reference rust any