![](/img/trans.png)
[英]Satisfying a trait bound with a const generic expression, is it possible?
[英]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
。 在你的情况, RHS
是U
(因为你必须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.