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

2411rust,实现特征

原文

Rust2024中,impl Trait位置的默认工作方式有了变化.是为了简化impl Trait,以更好地匹配人们一般的需求.

还添加了一个灵活的语法,让你需要时可完全控制.

Rust2024开始,一直在更改,何时可在返回位置impl Trait隐藏类型中使用泛型参数的规则:

1,即对返回位置impl Trait隐藏类型,的新的默认值,可在域中用任意泛型参数,而不仅是(仅适合Rust2024)类型;
2,用来显式声明可用哪些类型一个语法(可在任意版本中使用).

新的显式语法"用约束":如,impl Trait+use<'x,T>表示允许隐藏类型使用'xT(但不能使用域内其他泛型参数).

背景:返回位置impl Trait

本篇涉及返回位置impl Trait,如以下示例:

fn process_data(data: &[Datum]
) -> impl Iterator<Item = ProcessedDatum> {data.iter().map(|datum| datum.process())
}

在此返回位置``使用->impl Iterator,表明该函数返回实际类型由编译器根据函数体确定的"某种迭代器".它叫做"隐藏类型",因为调用者无法确切地知道它是什么;

他们必须针对Iterator特征编码.但是,在生成代码时,编译器根据实际的精确类型生成代码,从而确保充分优化调用者.

尽管调用者不知道确切的类型,但确实需要知道它继续借用数据参数,这样可确保在迭代数据引用保持有效.

此外,调用者必须可无需查看函数体,仅根据类型签名来弄清楚它.

Rust当前规则是,返回位置impl Trait值只有在impl Trait自身中有引用的生命期时,才能使用引用.此例中,impl Iterator<Item = ProcessedDatum>引用生命期,因此抓数据非法的.

你可在玩耍地上亲眼看到它.

此时收到的错误消息(“隐藏类型抓生命期”)不是很直观,但它确实附带了如何修复它的有用建议:
帮助:要声明impl Iterator<Item = ProcessedDatum>
''_'时,你可添加显式''_'生命期约束

impl Iterator<Item = ProcessedDatum> + '_ {

此建议的显式版本,函数签名变为:

fn process_data<'d>(data: &'d [Datum]
) -> impl Iterator<Item = ProcessedDatum> + 'd {data.iter().map(|datum| datum.process())
}

在此版本中,在impl Trait类型中显式引用,'d数据的生命期,因此允许使用.即只要正在使用迭代器,就必须持续借用数据,即它(正确地)此例中标记错误:

let mut data: Vec<Datum> = vec![Datum::default()];
let iter = process_data(&data);
data.push(Datum::default()); //<-错误!
iter.next();

此设计的可用性问题

impl Trait中可用哪些泛型参数规则是在早期根据一组有限的示例确定的.随着时间,会注意到它们有许多问题.

1,不是正确的默认值

主要代码基(编译器和crates.io上的)的调查发现,绝大多数返回位置impl Trait值都要用生命期,因此默认不抓没用.

2,不够灵活

当前规则是返回位置impl Trait总是允许使用类型参数,有时如果它们出现在约束中,允许使用生命期参数.

如上,该默认值是错误的,因为大多数函数实际上确实想允许返回类型使用生命期参数:这至少有变通.
默认值也是错误的,因为某些函数想要显式声明它们不在返回类型使用类型参数,且现在无法覆盖它.

最初意图是类型别名impl Trait可解决该用例,但很麻烦.

3,难以解释

因为默认值错误的,所以用户经常遇见这些错误!添加编译器提示以建议+'_有用,但用户必须遵守不完全理解的提示并不是很好.

4,错误的建议

impl Trait添加+'_参数可能会很怪,但并不是很难.可惜,它一般是错误的注解,导致不必要的编译器错误,正确的修复很复杂,有时甚至不可能.考虑如下示例:

fn process<'c, T> {context: &'c Context,data: Vec<T>,
) -> impl Iterator<Item = ()> + 'c {data.into_iter().map(|datum| context.process(datum))
}

此处,处理函数用context.process来处理数据中的(T类型)每个元素.因为返回值使用环境,因此按+'c声明它.

在此真正目标是允许类型中,使用'c;写+'c实现该目标,因为现在在约束列表中有'c.但是,虽然编写+'c是使'c出现在约束中的方便方法,但也表明隐藏类型必须比'c更久.

该要求是不必要的,实际上会导致本例编译错误,在玩耍地上试一下.

5,与Rust的其他部分不一致

当前设计还与Rust其他部分不一致.

异步FN去糖

Rust定义异步fn来去糖返回->impl Future的普通fn.因此,你想像处理此函数:

async fn process(data: &Data) { .. }

…将(大致)去糖为:

fn process(data: &Data
) -> impl Future<Output = ()> {async move {..}
}

实际上,因为可用生命期的规则有问题,这不是实际的去糖.实际的去糖针对一个特殊的允许使用所有生命期impl Trait.

但是该形式的impl Trait并未向终端用户公开.

impl Trait中的特征

Rust2024设计

上述问题促使在Rust2024结合了两件事来用新的方法:

1,一个新的默认值,即返回位置impl Trait隐藏类型可用域中不仅是类型(仅适合Rust2024)的泛型参数;

2,一个显式声明可用哪些类型的语法.

新的显式语法"用约束":如,impl Trait+use<'x,T>表示允许隐藏类型使用'xT(但不能使用域内其他泛型参数).

现在默认可使用生命期

Rust2024中,默认是返回位置impl Trait值的隐藏类型使用域内无论是类型还是生命期泛型参数.

即在Rust2024中可很好编译这篇博文初始示例,设置玩耍地中的版本2024来试试:

fn process_data(data: &[Datum]
) -> impl Iterator<Item = ProcessedDatum> {data.iter().map(|datum| datum.process())
}

好!

impl Trait可包含一个use<>bound来精确指定使用的泛型类型和生命期

例外是,当函数仅接受读取值且不包含在返回值中的引用参数时.一个示例是下面的indices()函数:它接受一个&[T]类型的切片,但它唯一做的是读取长度,用它来创建一个迭代器.
返回值中不需要切片自身:

fn indices<'s, T>(slice: &'s [T],
) -> impl Iterator<Item = usize> {0 .. slice.len()
}

Rust2021中,该声明隐式地表示切片没有返回类型.但在Rust2024中,默认值恰恰相反.即像此调用者停止在Rust2024中编译,因为他们现在假设直到迭代完成,数据是借用的:

fn main() {let mut data = vec![1, 2, 3];let i = indices(&data);data.push(4); //<-错误!<--假设访问`'&data'`i.next(); //
}

这实际上可能就是你想要的!即你可稍后修改indices()的定义,这样它实际上在结果中包含切片.即,新的默认值延续了impl Trait的传统,即保留在不中断调用者时,函数更改其实现灵活性.

但是,如果它不是你想要的呢?如果想保证indices()不会在其返回值中,保存参数切片的引用,你现在在返回类型中包含use<>约束来显式表示返回类型中可包含哪些泛型参数来完成.

indices()时,返回类型实际上不使用泛型,因此最好写为use<>:

fn indices<'s, T>(slice: &'s [T],
) -> impl Iterator<Item = usize> + use<> {//-----返回类型不使用`''s'或'T'`0 .. slice.len()
}

这与早期版本中impl Trait的限制相应,它总是必须抓类型参数.此时,可如下,避免了编译错误,但仍比必要的更保守:

fn indices<T>(slice: &[T],
) -> impl Iterator<Item = usize> + use<T> {0 .. slice.len()
}

或:'静态约束.对完全不抓引用特例,也可用'静态绑定,如下(自己试一下):

fn indices<'s, T>(slice: &'s [T],
) -> impl Iterator<Item = usize> + 'static {//-------返回类型不会抓引用.0 .. slice.len()
}

"此时,静态约束很方便,特别是考虑到当前use<>约束的实现限制,但use<>约束总体上更灵活.

如,编译器有一个返回newtype索引I而不是usize索引的变量,因此它包含一个use<I>声明.

相关文章:

2411rust,实现特征

原文 在Rust2024中,impl Trait在中位置的默认工作方式有了变化.是为了简化impl Trait,以更好地匹配人们一般的需求. 还添加了一个灵活的语法,让你需要时可完全控制. 从Rust2024开始,一直在更改,何时可在返回位置impl Trait的隐藏类型中使用泛型参数的规则: 1,即对返回位置i…...

SpringBoot3与JUnit5集成测试

你可以在 Spring Boot 3 中轻松设置和运行 JUnit 集成测试。合理使用 Spring 提供的注解和工具&#xff0c;可以确保测试的高效性和可靠性。以下是集成测试的步骤和示例&#xff1a; 1. 添加依赖 在 pom.xml 中添加 Spring Boot Starter Test 依赖&#xff0c;它包含 JUnit 5 …...

工程企业需要什么样的物资管理系统?为什么需要物资管理系统?

一、背景与意义 在工程项目的建设中&#xff0c;无论是高楼大厦的拔地而起&#xff0c;还是高速公路的绵延铺展&#xff0c;物资都是最基础的要素之一。从钢筋水泥到施工机械&#xff0c;任何一种物资的管理不善都可能导致项目延误、成本超支&#xff0c;甚至质量问题。然而&a…...

Vue + Websocket播放PCM(base64转ArrayBuffer、 字符串转ArrayBuffer)

文章目录 引言I 音视频处理相关概念和APIII 案例:基于开源库 pcm-player方式播放借助MediaSource和Audio对象播放音频流。基于原生api AudioContext 播放操作III 格式转换js字符串转ArrayBufferbase64 转 ArrayBufferIV 解决pcm-player分片播放问题引言 需求: 基于webscoket传…...

华为防火墙技术基本概念学习笔记

1.防火墙概述 1.1防火墙与交换机、路由器对比 路由器与交换机的本质是转发&#xff0c;防火墙的本质是控制。 防火墙与路由器、交换机是有区别的。路由器用来连接不同的网络&#xff0c;通过路由协议保证互联互通&#xff0c;确保将报文转发到目的地;交换机则通常用来组建局域…...

Mesh路由组网

Mesh无线网格网络&#xff0c;多跳&#xff08;multi-hop&#xff09;网络&#xff0c;为解决全屋覆盖信号&#xff0c;一般用于家庭网络和小型企业 原理 网关路由器&#xff08;主路由&#xff0c;连接光猫&#xff09;&#xff0c;Mesh路由器&#xff08;子路由&#xff0c;…...

【数据结构】七种常用排序总结

一、七种排序及其讲解 以下为七种排序的讲解&#xff1a; 【数据结构】插入排序——直接插入排序 和 希尔排序 【数据结构】选择排序——选择排序 和 堆排序 【数据结构】交换排序——冒泡排序 和 快速排序 【数据结构】归并排序 —— 递归及非递归解决归并排序 二、排序的…...

【在Linux世界中追寻伟大的One Piece】多线程(一)

目录 1 -> Linux线程概念 1.1 -> 什么是线程 1.2 -> 线程的优点 1.3 -> 线程的缺点 1.4 -> 线程异常 1.5 -> 线程用途 2 -> Linux线程 VS 进程 2.1 -> 线程和进程 2.2 -> 进程的多个线程共享 3 -> Linux线程控制 3.1 -> POSIX线程…...

《Python编程实训快速上手》第十天--处理CSV文件和JSON数据

CSV&#xff1a;简化的电子表格&#xff0c;被保存为纯文本文件 JSON&#xff1a;是一种数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也易于机器解析和生成&#xff0c;以JavaScript源代码的形式将信息保存在纯文本文件中 一、csv模块 CSV文件中的每行代表电…...

基于springboot停车场管理系统源码和论文

如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统停车场管理系统信息管理难度大&#xff0c;容错率低&#xff0c;…...

Linux的桌面

Linux的桌面是可以卸载的 的确&#xff0c;Linux并不像Windows&#xff0c;Linux本身是一个基于命令行的操作系统&#xff0c;在内核眼中&#xff0c;桌面只不过是个普通的应用程序&#xff0c;所以&#xff0c;在Linux的桌面中可以完成的事情&#xff0c;命令行中也基本可以完…...

Spring Boot 3.0废弃了JavaEE,改用了Jakarta EE

Spring Boot 3.0废弃了JavaEE&#xff0c;改用了Jakarta EE 历史背景 javax变成Jakarta的主要原因是因为Java EE项目从Oracle转移到了Eclipse Foundation&#xff0c;并改名为Jakarta EE。 JavaEE是从Java 1.2版本开始推出的Java企业级开发平台&#xff0c;最初的名称是J2EE(J…...

java-排序算法汇总

排序算法&#xff1a; 冒泡排序&#xff08;Bubble Sort&#xff09; 选择排序&#xff08;Selection Sort&#xff09; 插入排序&#xff08;Insertion Sort&#xff09; 快速排序&#xff08;Quick Sort&#xff09; 归并排序&#xff08;Merge Sort&#xff09; 堆排序&…...

C0030.Clion中运行提示Process finished with exit code -1073741515 (0xC0000135)解决办法

1.错误提示 2.解决办法 添加环境变量完成之后&#xff0c;重启Clion软件&#xff0c;然后就可以正常调用由mingw编译的opencv库了。...

如何理解JS的 异步

JS是一门单线程的语言&#xff0c;这是因为它运行在浏览器的渲染主线程中&#xff0c;而渲染主线程只有一个。 而渲染主线程承担着诸多的工作&#xff0c;渲染页面、执行JS都在其中运行。 如果使用同步的方式&#xff0c;就极有可能导致主线程产生阻塞&#xff0c;从而导致消…...

vsgithub

VS&GitHub项目联动&#xff08;上传和克隆&#xff09;&#xff0c;创建你的第一个仓库&#xff0c;小白配置_vs上传代码到github-CSDN博客...

Android蓝牙架构,源文件目录/编译方式学习

Android 版本 发布时间 代号&#xff08;Codename&#xff09; Android 1.0 2008年9月23日 无 Android 1.1 2009年2月9日 Petit Four Android 1.5 2009年4月27日 Cupcake Android 1.6 2009年9月15日 Donut Android 2.0 2009年10月26日 Eclair Android 2.1 2…...

10 - Clickhouse集群部署以及副本和分片

目 一、副本 1、简介 2、副本写入流程 3、副本配置步骤 3.1、启动zookeeper集群 3.2、在 hallo100 的/etc/clickhouse-server/config.d 目录下创建一个名为metrika.xml 的配置文件,内容如下&#xff1a; 3.3、在 hallo100 的/etc/clickhouse-server/config.xml 中增加如…...

FreeRTOS的软件定时器与事件标志组

目录 1.FreeRTOS软件定时器 1.1 什么是FreeRTOS软件定时器&#xff1f; 1.2 学习软件定时器的意义 1.3 软件定时器的简介 1.3.1 软件定时器概述 1.3.2 编写回调函数的注意事项 1.4 定时器服务/Daemon 任务 1.4.1 定时器服务任务与队列 1.4.2 定时器相关配置 configUSE_T…...

生产制造领域的多元化模式探索

在当今全球化和信息化的时代背景下&#xff0c;生产制造领域正经历着前所未有的变革。随着消费者需求的多样化、市场竞争的加剧以及技术的不断进步&#xff0c;传统的生产制造模式已经难以满足现代企业的需求。因此&#xff0c;多种生产制造模式应运而生&#xff0c;以适应不同…...

大数据技术之SparkCore

RDD概述 什么是RDD RDD&#xff08;Resilient Distributed Dataset&#xff09;叫做弹性分布式数据集&#xff0c;是Spark中最基本的数据抽象。代码中是一个抽象类&#xff0c;它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。 RDD五大特性 RDD编程 RDD的创…...

element-plus的组件数据配置化封装 - table

目录 一、封装的table、table-column组件以及相关ts类型的定义 1、ATable组件的封装 - index.ts 2、ATableColumn组件的封装 - ATableColumn.ts 3、ATable、ATableColumn类型 - interface.ts 二、ATable、ATableColumn组件的使用 三、相关属性、方法的使用以及相关说明 1. C…...

蓝桥杯每日真题 - 第15天

题目&#xff1a;&#xff08;钟表&#xff09; 题目描述&#xff08;13届 C&C B组B题&#xff09; 解题思路&#xff1a; 理解钟表指针的运动&#xff1a; 秒针每分钟转一圈&#xff0c;即每秒转6度。 分针每小时转一圈&#xff0c;即每分钟转6度。 时针每12小时转一圈…...

c#:winform调用bartender实现打印(学习整理笔记)

效果 学习路径 C# winform调用Bartender进行自定义打印、批量打印、检索文件夹中的模板_哔哩哔哩_bilibili 一、初始环境搭建见&#xff1a; c#:winform引入bartender-CSDN博客https://blog.csdn.net/weixin_46001736/article/details/143989473?sharetypeblogdetail&s…...

周期法频率计的设计

目录 周期法频率计 分析&#xff1a; 设计过程&#xff1a; 周期法频率计 对于低频信号&#xff0c;应用周期法进行测频。周期法测频的基本原理是&#xff1a;应用标准频率信号统计被测信号两个相邻脉冲之间的脉冲数&#xff0c;然后通过脉冲数计算出被测信号的周期&#xff…...

【2024亚太杯亚太赛APMCM C题】数学建模竞赛|宠物行业及相关产业的发展分析与策略|建模过程+完整代码论文全解全析

第一个问题是&#xff1a;请基于附件 1 中的数据以及你的团队收集的额外数据&#xff0c;分析过去五年中国宠物行业按宠物类型的发展情况。并分析中国宠物行业发展的因素&#xff0c;预测未来三年中国宠物行业的发展。 第一个问题&#xff1a;分析中国宠物行业按宠物类型的发展…...

uniapp的renderjs使用

‌uniapp中的RenderJS主要服务于APP和H5平台&#xff0c;其作用包括降低逻辑层和视图层的通讯损耗&#xff0c;提供高性能视图交互能力&#xff0c;以及在视图层操作DOM和运行Web的JS库‌。 RenderJS是uni-app中一个特性&#xff0c;它允许开发者在页面中使用JavaScript直接渲…...

CPU命名那些事

一、Intel CPU命名 1. 命名结构 Intel CPU 的命名通常包含以下几个部分&#xff1a; 品牌 产品线 系列 代数 具体型号 后缀 例如&#xff1a;Intel Core i7-13700K 2. 各部分含义 品牌 Intel&#xff1a;表示厂商&#xff08;几乎所有命名中都有&#xff09;。不同品…...

【LLM】一文学会SPPO

博客昵称&#xff1a;沈小农学编程 作者简介&#xff1a;一名在读硕士&#xff0c;定期更新相关算法面试题&#xff0c;欢迎关注小弟&#xff01; PS&#xff1a;哈喽&#xff01;各位CSDN的uu们&#xff0c;我是你的小弟沈小农&#xff0c;希望我的文章能帮助到你。欢迎大家在…...

鸿蒙多线程开发——线程间数据通信对象03(sendable)

1、简 介 在传统JS引擎上&#xff0c;对象的并发通信开销的优化方式只有一种&#xff0c;就是把实现下沉到Native侧&#xff0c;通过Transferable对象的转移或共享方式降低并发通信开销。而开发者仍然还有大量对象并发通信的诉求&#xff0c;这个问题在业界的JS引擎实现上并没…...

web前端开发--动画效果

1、3D旋转 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>3D旋转</title><style type"text/css">div{/*设置大盒子样式*/width: 100px;height: 100px;/*background-color: rgba(255,0,0,0.5);*/ba…...

【数据分享】中国价格统计年鉴(2013-2024) PDF

数据介绍 犹如一座珍贵的宝库&#xff0c;全面而系统地记录了中国在这一时期的价格变动情况。它涵盖了丰富的内容&#xff0c;包括宏观经济指标、商品价格、居民消费价格以及城市物价监测等多个方面。 在宏观经济指标方面&#xff0c;年鉴中收录了 GDP、CPI、PPI 等重要数据&…...

鸿蒙NEXT开发案例:字数统计

【引言】 本文将通过一个具体的案例——“字数统计”组件&#xff0c;来探讨如何在鸿蒙NEXT框架下实现这一功能。此组件不仅能够统计用户输入文本中的汉字、中文标点、数字、以及英文字符的数量&#xff0c;还具有良好的用户界面设计&#xff0c;使用户能够直观地了解输入文本…...

TritonServer中加载模型,并在Gunicorn上启动Web服务调用模型

TritonServer中加载模型,并在Gunicorn上启动Web服务调用模型 一、TritonServer中加载模型1.1 搭建本地仓库1.2 配置文件1.3 服务端代码1.4 启动TritonServer二、Gunicorn上启动Web服务2.1 安装和配置Gunicorn2.2 启动Gunicorn三、调用模型四、性能优化与监控五、总结在深度学习…...

[UE5学习] 一、使用源代码安装UE5.4

一、简介 本文介绍了如何使用源代码安装编译UE5.4&#xff0c;并且新建简单的项目&#xff0c;打包成安卓平台下的apk安装包。 二、使用源代码安装UE5.4 注意事项&#xff1a; 请保证可以全程流畅地科学上网。请保证C盘具有充足的空间。请保证接下来安装下载的visual studi…...

2023AE软件、Adobe After Effects安装步骤分享教程

2023AE软件是一款由Adobe公司开发的视频编辑软件&#xff0c;也被称为Adobe After Effects。它在广告、电影、电视和网络视频等领域广泛应用&#xff0c;用于制作动态图形、特效、合成和其他视觉效果。该软件支持多种视频和音频文件格式&#xff0c;具有丰富的插件和预设&#…...

Xilinx 7 系列 FPGA的各引脚外围电路接法

Xilinx 7系列FPGA的外围电路接法涉及到多个方面&#xff0c;包括电源引脚、时钟输入引脚、FPGA配置引脚、JTAG调试引脚&#xff0c;以及其他辅助引脚。 本文参考资料&#xff1a; ds180 - 7 Series FPGAs Data Sheet - Overview ds181 - Artix 7 FPGAs Data Sheet - DC and AC…...

【LeetCode热题100】队列+宽搜

这篇博客是关于队列宽搜的几道题&#xff0c;主要包括N叉树的层序遍历、二叉树的锯齿形层序遍历、二叉树最大宽度、在每个数行中找最大值。 class Solution { public:vector<vector<int>> levelOrder(Node* root) {vector<vector<int>> ret;if(!root) …...

<Sqlite><websocket>使用Sqlite与websocket,实现网页端对数据库的【读写增删】操作

前言 本文是在websocket进行通讯的基础,添加数据库进行数据的存储,数据库软件使用的是sqlite。 环境配置 系统:windows 平台:visual studio code 语言:javascript、html 库:nodejs、sqlite 概述 此前,我们实现在利用websocket和socket,将网页端与下位控制器如PLC进行…...

summernote富文本批量上传音频,视频等附件

普通项目,HTML的summernote富文本批量上传音频,视频等附件(其他附件同理) JS和CSS的引入 <head><th:block th:include"include :: summernote-css" /> </head> <body><th:block th:include"include :: summernote-js" /> …...

第六十五周周报 UP2ME

文章目录 week 65 UP2ME摘要Abstract1. 题目2. Abstract3. 文献解读3.1 Introduction3.2 创新点 4. 网络结构4.1 单变量预训练4.1.1 样例生成4.1.2 掩码自动编码器预训练4.1.3 即时反应模式 4.2 多元微调4.2.1 稀疏依赖图构造4.2.2 时域频道层 5. 实验结果6. 结论7. 部分关键代…...

Unity 使用 Excel 进行配置管理(读Excel配置表、Excel转保存Txt 文本、读取保存的 Txt 文本配置内容)

Unity 使用 Excel 进行配置管理(读Excel配置表、Excel转保存Txt 文本、读取保存的 Txt 文本配置内容) 目录 Unity 使用 Excel 进行配置管理(读Excel配置表、Excel转保存Txt 文本、读取保存的 Txt 文本配置内容) 一、简单介绍 二、实现原理 三、注意事项 四、案例简单步…...

【STM32】MPU6050简介

文章目录 MPU6050简介MPU6050关键块带有16位ADC和信号调理的三轴MEMS陀螺仪具有16位ADC和信号调理的三轴MEMS加速度计I2C串行通信接口 MPU6050对应的数据手册&#xff1a;MPU6050 陀螺仪加速度计 链接: https://pan.baidu.com/s/13nwEhGvsfxx0euR2hMHsyw?pwdv2i6 提取码: v2i6…...

学习日记_20241123_聚类方法(MeanShift)

前言 提醒&#xff1a; 文章内容为方便作者自己后日复习与查阅而进行的书写与发布&#xff0c;其中引用内容都会使用链接表明出处&#xff08;如有侵权问题&#xff0c;请及时联系&#xff09;。 其中内容多为一次书写&#xff0c;缺少检查与订正&#xff0c;如有问题或其他拓展…...

Qt常用控件 按钮

文章目录 1. QAbstractButton 简介2. QPushButton2.1 例子1&#xff0c;设置按钮的图标2.2 例子2&#xff0c;设置按钮快捷键 3. QRadioButton3.1 介绍3.2 例子1&#xff0c;选择性别3.3 例子2&#xff0c;试试其他的信号3.3 例子3&#xff0c;分组 4. QCheckBox4.1 介绍4.2 例…...

医院信息化与智能化系统(22)

医院信息化与智能化系统(22) 这里只描述对应过程&#xff0c;和可能遇到的问题及解决办法以及对应的参考链接&#xff0c;并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图&#xff0c;可以试试PlantUML&#xff0c;告诉GPT你的文件结构&#xff0c;让他给你对应…...

嵌入式硬件实战基础篇(二)-稳定输出3.3V的太阳能电池-无限充放电

引言&#xff1a;本内容主要用作于学习巩固嵌入式硬件内容知识&#xff0c;用于想提升下述能力&#xff0c;针对学习稳压芯片和电容以及电池之间的运用&#xff0c;对于硬件PCB以及原理图的练习和前面硬件篇的实际运用&#xff1b;太阳能是一种清洁、可再生的能源&#xff0c;广…...

UE5材质篇5 简易水面

不得不说&#xff0c;UE5里搞一个水面实在是相比要自己写各种反射来说太友好了&#xff0c;就主要是开启一堆开关&#xff0c;lumen相关的&#xff0c;然后稍微连一些蓝图就几乎有了 这里要改一个shading model&#xff0c;要这个 然后要增加一个这个node 并且不需要连接base …...

Rollup配置实战:多产物与多入口的完美结合 (2)

常用配置 多产物配置 我们可以将 output 改造成一个数组&#xff0c;对外暴露出不同格式的产物供他人使用&#xff0c;不仅包括 ESM&#xff0c;也需要包括诸如CommonJS、UMD等格式&#xff0c;保证良好的兼容性 import { defineConfig } from rollupexport default defineC…...

iced源码分析

前言 iced是一个比较流行的UI库&#xff0c;设计思路还是挺有意思的&#xff0c;不过因为rust复杂的语法&#xff0c;这个库确实很难让一个不精通rust的开发者那么容易理解。这里记录下这几天的阅读源码心得。 正文 iced核心包括四个模块。 iced库&#xff0c;主要控制应用…...