std :: marker :: Sized不满意

时间:2016-06-07 04:57:13

标签: rust

我正在尝试创建一种灵感来自我正在研究的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”。在线的各种示例似乎没有指定动态大小的类型,所以我想知道我做错了什么。

0 个答案:

没有答案