仅当我包含标有“???”的行时,以下代码才会编译。如果我删除该行,我会收到很多关于参数“S”从未被使用的错误消息。我在更大的场景中偶然发现了这个“问题”,并且很难确定它。据我所知,这是由于类型之间的循环引用而发生的。
struct Question<S> {
x: Vec<AnswerRef<S>>,
_y: PhantomData<S> // ???
}
struct QuestionRef<S>(Rc<Question<S>>);
struct Answer<S> {
x: Option<QuestionRef<S>>
}
struct AnswerRef<S>(Rc<Answer<S>>);
Run Code Online (Sandbox Code Playgroud)
添加PhantomData
解决了问题,但我不明白为什么。我不明白为什么它会在这种情况下产生影响。有人可以向我解释一下吗?
归档时间: |
|
查看次数: |
117 次 |
最近记录: |