#variance #marker #subtype

no-std type-variance

子类型变异性标记特质

4 个版本

0.1.0 2020年9月1日
0.0.3 2020年8月14日
0.0.2 2020年7月19日
0.0.1 2020年7月19日

#1290 in Rust 模式

MIT 许可证

12KB
75

变异性

变异性是一组类似于 PhantomData 的标记类型,它使得指定泛型类型相对于其参数的变异性变得更容易。

Latest version Documentation License

入门

可以在 crates.io 上找到 Variance crate。将以下依赖项添加到您的 Cargo 清单中

[dependencies]
type-variance = "0.1.0"

查看 文档 获取详细使用信息。

示例

该软件包提供了三个零大小标记类型:Covariant<T>Contravariant<T>Invariant<T>,每个都标记给定的类型参数具有相应的变异性。

例如

use type_variance::{Covariant, Contravariant};

// UnaryFunction is a zero-sized type that is covariant to `Arg` and
// contravariant to `Ret`.
struct UnaryFunction<Arg, Ret> {
    arg: Covariant<Arg>,
    ret: Contravariant<Ret>,
}

fn foo<'sup>() {
    // Here, the type &'static() is a subtype of &'sup().
    // Therefore, `Arg` may be replaced with a subtype and `Ret` may be
    // replaced with a supertype.
    let _func: UnaryFunction<&'sup(), &'static()> = UnaryFunction {
        arg: Covariant::<&'static()>::default(),
        ret: Contravariant::<&'sup()>::default(),
    };
}

许可证

该软件包采用 MIT 许可证

无运行时依赖