![](/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.