非泛型结构能否在rust中实现泛型功能?

时间:2019-07-04 15:37:50

标签: generics syntax rust

非泛型结构能否在rust中实现泛型函数,其工作原理如下:

    let boxNode1 = SCNNode(geometry: cubeGeometry1)
    boxNode1.position = SCNVector3(X,Y,Z)

否则,假设S实现通用特征Tt:


struct S;

impl <T> S {
    fn do_something(value : T) {
        //do something
    }
}

fn main() {
    let a = /*a value*/;
    S::do_something(a);
}

有什么办法可以使它起作用?

1 个答案:

答案 0 :(得分:1)

如果impl块在类型本身中使用,则只能声明它的类型变量。

但是,您也可以在各个方法上引入新的类型变量:

impl S {
    fn do_something<T>(value: T) {
        //do something
    }
}

这对于作为闭包的参数尤为常见,因为每个闭包都有不同的类型,因此这对于每次都可以使用不同的闭包调用该方法是必要的。例如,Iterator::map的定义如下:

fn map<B, F>(self, f: F) -> Map<Self, F>
where
    F: FnMut(Self::Item) -> B, 

如果为类型而不是方法声明了F,则每次调用map时都必须使用相同的闭包-不太有用。