我正在尝试在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,
}
这里有一个在Playground上重现该问题的简化示例。 这会生成一个错误:
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'"。
我是做错了什么还是这是一个bug?如何正确地操作?
PhantomData<*const U>
,在等待更确切的答案时。 - Matthieu M.