繁体   English   中英

性状受制于普通特征

[英]Trait bound on generic trait

我想知道如何创建绑定到通用特征的通用函数。

在此示例中,我选择了BitXor std::ops::BitXor的声明是BitXor<RHS, Result>

因此,如果我们有我们的功能:

fn e<T: BitXor>(m:T, k:T) -> T {
    m ^ k
}

编译器会抱怨:

error: Wrong number of type arguments: expected 2 but found 0.

所以我尝试了:

fn e<T: BitXor<U, V>, U, V>(m:T, k:T) -> T {
    m ^ k
}

但是得到了相当混乱的错误:

Mismatched types: expected `U` but found `T` (expected type parameter but found type parameter).

有什么办法吗?

这是BitXor特性的完整定义:

#[lang="bitxor"]
pub trait BitXor<RHS, Result> {
    fn bitxor(&self, rhs: &RHS) -> Result;
}

注意rhs操作数的类型是&RHS 在你的情况, RHSU (因为你必须BitXor<U, V>k ,其传递作为rhs通过^运算符,是类型的T 同样,结果的类型为Result ,在您的情况下为V ,但函数返回T

有两种可能的签名,具体取决于您的用例:

fn e<T: BitXor<U, V>, U, V>(m: T, k: U) -> V {
    m ^ k
}

在这一章中,我们使用更多的类型参数来获得最大的通用性。

fn e<T: BitXor<T, T>>(m: T, k: T) -> T {
    m ^ k
}

在这一章中,我们牺牲了通用性以将所有值限制为同一类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM