当前位置: 首页 > news >正文

【unitrix】 6.17 基本非负整数( BaseUnsigned )特质(base_unsigned.rs)

一、源码

这段代码定义了一个 Rust trait BaseUnsigned 并为几种无符号整数类型实现了这个 trait。

use core::ops::{Not, Neg, Add, Sub, Mul, Div, AddAssign, SubAssign};
use crate::number::BaseNumber;
/// 基础非负整数类型标记特征
/// 
/// 要求实现基本算术运算和常见特征
pub trait BaseUnsigned:BaseNumber +Not +Neg +Add<Output = Self> +Sub<Output = Self> +Mul<Output = Self> +Div<Output = Self> +AddAssign +SubAssign +Copy +Clone +Default +Sized +'static
{}// 为标准整数类型实现BaseInt
impl BaseUnsigned for u8 {}
impl BaseUnsigned for u16 {}
impl BaseUnsigned for u32 {}
impl BaseUnsigned for u64 {}
impl BaseUnsigned for u128 {}
impl BaseUnsigned for usize {}

二、

  1. 导入依赖

use core::ops::{Not, Neg, Add, Sub, Mul, Div, AddAssign, SubAssign};
use crate::number::BaseNumber;
  • 从 core::ops 模块导入了一系列运算符 trait(Not, Neg, Add 等),这些 trait 允许类型重载对应的运算符(!, -, +, -, *, /, +=, -=)。

  • 从当前 crate 的 number 模块导入 BaseNumber trait。

  1. BaseUnsigned Trait 定义

pub trait BaseUnsigned:BaseNumber +Not +Neg +Add<Output = Self> +Sub<Output = Self> +Mul<Output = Self> +Div<Output = Self> +AddAssign +SubAssign +Copy +Clone +Default +Sized +'static
{}

BaseUnsigned 是一个标记 trait(没有定义任何方法),它要求实现它的类型必须满足以下所有条件:

  • 实现 BaseNumber trait(基础数值 trait)

    实现一系列运算符 trait:

    • Not(! 运算符)

    • Neg(- 运算符)

    • Add(+ 运算符,输出类型为 Self)

    • Sub(- 运算符,输出类型为 Self)

    • Mul(* 运算符,输出类型为 Self)

    • Div(/ 运算符,输出类型为 Self)

    • AddAssign(+= 运算符)

    • SubAssign(-= 运算符)

    • 实现 Copy 和 Clone trait(表示类型可以按位复制)

    • 实现 Default trait(类型有默认值)

    • 实现 Sized trait(类型大小在编译时已知)

    • 生命周期约束 'static(类型不包含非静态引用,或者可以存活整个程序生命周期)

  1. 为无符号整数类型实现 BaseUnsigned

impl BaseUnsigned for u8 {}
impl BaseUnsigned for u16 {}
impl BaseUnsigned for u32 {}
impl BaseUnsigned for u64 {}
impl BaseUnsigned for u128 {}
impl BaseUnsigned for usize {}

这些实现表明 u8、u16、u32、u64、u128 和 usize 都满足 BaseUnsigned 的所有约束条件。Rust 的标准库已经为这些类型实现了所有必要的 trait(如 Add、Sub、Copy 等),因此这里可以直接为空实现。

三、总结

这段代码定义了一个 BaseUnsigned trait,用于标记那些满足以下条件的类型:

  • 是基础数值类型(BaseNumber)

  • 支持常见算术运算

  • 是可复制、可克隆、有默认值的

  • 大小固定且生命周期为 'static

然后为 Rust 的所有标准无符号整数类型实现了这个 trait。这种设计通常用于泛型约束,确保泛型类型参数具有所需的操作和能力。

http://www.dtcms.com/a/300862.html

相关文章:

  • 【笔记】拉乌尔定律推导
  • 获取电脑主板的 通用唯一标识符(UUID)
  • C++学习(线程相关)
  • Git+宝塔面板部署Hugo博客
  • 【橘子分布式】gRPC(番外篇-客户端重试机制)
  • 五自由度磁悬浮轴承转子不平衡振动破壁战:全息前馈控制实战密码
  • 【DataWhale】快乐学习大模型 | 202507,Task08笔记
  • STM32移植LVGL9.2.1教程
  • 视频转GIF工具,一键批量制作高清动图
  • CLAP文本-音频基础模型: LEARNING AUDIO CONCEPTS FROM NATURAL LANGUAGE SUPERVISION
  • 设计模式(四)创建型:生成器模式详解
  • 设计模式(三)创建型:抽象工厂模式详解
  • 第五章第二节 对射式红外传感器计次旋转编码器计次
  • 8.c语言指针
  • 标签驱动的可信金融大模型训练全流程-Agentar-Fin-R1工程思路浅尝
  • AI驱动的金融推理:Fin-R1模型如何重塑行业决策逻辑
  • JSON格式化与结构对比
  • 2025年量子计算与前沿技术融合:六大变革性方向深度解析
  • Rust实战:高效开发技巧
  • 02人工智能中优雅草商业实战项目视频字幕翻译以及声音转译之以三方AI模型API制作方式预算-卓伊凡|莉莉
  • 【在Unity游戏开发中Dictionary、List介绍】
  • 基于Springboot+UniApp+Ai实现模拟面试小工具七:前端项目创建及框架搭建
  • 深入理解 Spring 中的 XmlBeanFactory 原理及实践
  • 【最新版】防伪溯源一体化管理系统+uniapp前端+搭建教程
  • ArKTS:List 数组
  • 机器学习特征选择 explanation and illustration of ANOVA
  • ROS2总结(二)
  • UDS 0x29 身份验证服务 Authentication service
  • Rust Web 全栈开发(十一):WebAssembly 尝鲜
  • 2507rust,rust写驱动