簡體   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