我正在尝试用 Rust 实现八叉树。八叉树在类型上是通用的,但有一个约束,即它应该实现通用特征:
pub trait Generable<U> {
fn generate_children(&self, data: &U) -> Vec<Option<Self>>;
}
pub enum Octree<T, U>
where
T: Generable<U>,
{
Node {
data: T,
children: Vec<Box<Octree<T, U>>>,
},
Empty,
Uninitialized,
}
这里有一个
这会产生一个错误:
error[E0392]: parameter `U` is never used
--> src/main.rs:5:20
|
5 | pub enum Octree<T, U>
| ^ unused type parameter
|
= help: consider removing `U` or using a marker such as `std::marker::PhantomData`
删除U
签名结果为“未声明的类型名称‘U’”。
我做错了什么还是一个错误?如何正确地做到这一点?
我不相信你想要另一个泛型在这里,你想要一个关联类型 https://stackoverflow.com/q/32059370/155423:
pub trait Generable {
type From;
fn generate_children(&self, data: &Self::From) -> Vec<Option<Self>>
where
Self: Sized;
}
pub enum Octree<T>
where
T: Generable,
{
Node {
data: T,
children: Vec<Box<Octree<T>>>,
},
Empty,
Uninitialized,
}
fn main() {}
作为旁白,Vec<Box<Octree<T>>>
可能是间接的一层额外 - 你可以使用Vec<Octree<T>>
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)