在struct中嵌入泛型

时间:2015-05-04 18:06:39

标签: generics rust

我在使用Rust traits时遇到困难,例如哪种方法正确?

pub struct Cube<R>{
    pub vertex_data: [Vertex;24],
    pub asMesh: gfx::Mesh<R>
}

1 个答案:

答案 0 :(得分:4)

您只能在定义结构时使用泛型,但可以在这些泛型上使用 trait bounds 将其限制为特定类型。在这里,我使用了where子句:

trait Vertex {}

struct Mesh<R> {
    r: R,
}

struct Cube<V, R>
    where V: Vertex,
{
    vertex_data: [V; 24],
    mesh: Mesh<R>,
}

fn main() {}

您还希望在任何方法实现中使用这些边界:

impl<V, R> Cube<V, R>
    where V: Vertex,
{
    fn new(vertex: V, mesh: Mesh<R>) -> Cube<V, R> { ... }
}

实际上,您经常只会看到实现的where子句,而不是结构。这是因为您通常只通过方法访问结构,并且结构对最终用户是不透明的。如果你有公共领域,可能值得在这两个地方离开界限。