我想一個U64值轉換爲普通的數字型,有點像如何將u64值轉換爲通用數值類型?
fn f<T: AppropriateTrait>(v: u64) -> T {
v as T
}
並將其行爲語義等,例如,259u64 as u8
,即,它應該只取最顯著位。不幸的是,FromPrimitive::from_u64
函數返回Option<T>
,如果輸入值不適合,則返回None
。
這這裏工作:
fn f<T: FromPrimitive + Int + ToPrimitive>(v: u64) -> T {
T::from_u64(v & T::max_value().to_u64().unwrap()).unwrap()
}
但它是非常繁瑣和不雅。有沒有更好的辦法?
編輯:我只對鑄造成像u8,u16等整數類型感興趣,沒有時髦的東西。
爲什麼你想它作爲一個單獨的功能? 'v as u8'就能滿足你的要求,如果你需要它作爲函數,那麼'| v | v作爲u8'將正常工作。 – 2015-03-13 07:04:30
@Chris:上面的函數當然只是我想要做的事情的本質 - 或者我應該發佈2000多行代碼?我不能寫'v as u8',因爲'u8'只是一個例子。相信我,我需要轉換爲泛型類型,而不是特定類型。 – 2015-03-13 07:44:15
根據給出的要求,很難理解整個問題的目的*,爲什麼需要這個功能。多一點可能會有所幫助。 – 2015-03-13 12:42:41