Wie werden generische Typen umgewandelt, von denen ich weiß, dass sie ganze Zahlen sind?

Ich möchte die Rückkehrcodes von C-APIs generisch überprüfen und das Ergebnis muss frei von C-Typen wie @ seilibc::c_int. Gibt es Möglichkeiten, eine Funktion wie @ zu schreibe

fn check<S: PartialOrd + std::num::Zero, T> (x: S) -> Option<T> {
    if std::num::zero::<S>() <= x { Some(x as T) }
    else { None }
}

wenn ich sicher bin, dassS undT sind ganzzahlige Typen für alle Verwendungen voncheck()? Der Compiler lehnt meinen Code ab und beschwert sich übererror: non-scalar cast: `S` as `T`

Antworten auf die Frage(1)

Ihre Antwort auf die Frage