【发布时间】:2015-11-10 06:25:58
【问题描述】:
我正在尝试在 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,
}
这是simplified example reproducing the issue on the 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'”。
我做错了什么还是一个错误?如何正确执行此操作?
【问题讨论】:
-
看起来像是编译器的一个限制,您可以通过使用PhantomData 来解决它,添加一个“假”成员
PhantomData<*const U>,同时等待更明确的答案。 -
这有帮助,谢谢。虽然能够在没有 PhantomData 的情况下使用这些结构会很好;)
-
不客气 :) 我真的很想知道您的代码是应该被拒绝还是编译器错误...
-
我在 Github 上发现了一个看起来相似的问题 (github.com/rust-lang/rust/issues/26283),那里的人似乎认为这是编译器的限制,但我不确定这是否真的相同。 ..
标签: rust