我可以用 Rust 做 C++ 的 SFINAE 吗?

Gue*_*OCs 4 rust

我想知道这段代码:

#[inline(always)]
pub fn multiply_u128<T>(a: T, b: T, result: &mut[u64])  {
    let r = a as u128 * b as u128;
    //fill result with 64 bit chunks
}
Run Code Online (Sandbox Code Playgroud)

它适用于整数,除了Tis时u128。在这种情况下,我们可能会出现溢出。是否可以使此功能与u8, u16, u32,u64但不能一起使用u128

kmd*_*eko 6

我可以用 Rust 做 C++ 的 SFINAE 吗?

不,Rust 的泛型解析方式与 C++ 中的解析方式有很大不同。


实现这一点的最合适的方法是Into<u64>

pub fn multiply_u128<T: Into<u64>>(a: T, b: T, result: &mut[u64])  {
    let r = a.into() as u128 * b.into() as u128;
    // fill result with 64 bit chunks
}
Run Code Online (Sandbox Code Playgroud)

游乐场。另外,如果您打算使用夜间功能,请考虑使用u64::widening_mul.