我正在尝试创建一种灵感来自我正在研究的OpenGL项目的组件系统。此组件系统由包含某些属性和某些功能的结构定义。像这样:
pub struct Component<Lifecycle, PropType> {
lifecycle: Lifecycle,
props: PropType,
children: Vec<Component<Lifecycle, PropType>>,
}
Lifecycle的一个例子如下:
pub struct MeshLifecycle {
render: (Fn(ComponentProps) -> Mesh),
}
示例PropType如下所示:
pub struct ComponentProps {
position: Vertex,
}
现在,这会导致一些错误。首先:
the trait bound `std::ops::Fn(ComponentProps) -> Mesh + 'static: std::marker::Sized`
经过一番挖掘后,我想我应该将?Sized
应用于包含函数的类型。所以Component
定义现在是:
pub struct Component<Lifecycle: ?Sized, PropType> {
这部分有帮助,但并没有让我在那里。这是完整的编译器错误:
src/main.rs:10:5: 10:25 error: the trait bound `Lifecycle: std::marker::Sized` is not satisfied [E0277]
src/main.rs:10 lifecycle: Lifecycle,
^~~~~~~~~~~~~~~~~~~~
src/main.rs:10:5: 10:25 help: run `rustc --explain E0277` to see a detailed explanation
src/main.rs:10:5: 10:25 help: consider adding a `where Lifecycle: std::marker::Sized` bound
src/main.rs:10:5: 10:25 note: only the last field of a struct or enum variant may have a dynamically sized type
有没有办法让这样的工作(以及如何),或者这本质上是“动态的”?我在某处读到,我实际上要做的是创建一个“VTable”。在线的各种示例似乎没有指定动态大小的类型,所以我想知道我做错了什么。