在结构中嵌入泛型

She*_*osi 4 generics rust

我在使用 Rust 特性时发现困难,例如,哪个是正确的方法?

pub struct Cube<R>{
    pub vertex_data: [Vertex;24],
    pub asMesh: gfx::Mesh<R>
}
Run Code Online (Sandbox Code Playgroud)

She*_*ter 5

您只能在定义结构体时使用泛型,但您可以对这些泛型使用特征边界以将其限制为特定类型。在这里,我使用了以下where条款:

trait Vertex {}

struct Mesh<R> {
    r: R,
}

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

fn main() {}
Run Code Online (Sandbox Code Playgroud)

您还需要在任何方法实现上使用这些边界:

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

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