首页 > 解决方案 > 如何从 T 中减去 1,其中 T:num_traits::Num?

问题描述

我正在尝试使特征适用于所有数字整数类型。我虽然限制它num_traits::Num会迫使它只适用于u8、u16等,所以-1总是有效的。

pub fn divide_round_up<T: num_traits::Num>(value: T, divisor: T) -> T {
    return (value + divisor - 1) / divisor;
}

我明白了


   |
19 | pub fn divide_round_up<T: num_traits::Num>(value: T, divisor: T) -> T {
   |                        - this type parameter
20 |     return (value + divisor - 1) / divisor;
   |                               ^ expected type parameter `T`, found integer

我应该在这里做什么?

顺便说一句,没有板条箱就没有办法做到这一点吗?

标签: rust

解决方案


您可以绑定您的特征以使用num_traits::identities::One

use num_traits; // 0.2.14

pub fn divide_round_up<T: num_traits::Num + num_traits::identities::One + Copy>(
    value: T,
    divisor: T,
) -> T {
    return (value + divisor - T::one()) / divisor;
}

操场


推荐阅读