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

7 与mint库对象互转宏(macros.rs)

macros.rs代码定义了一个Rust宏mint_vec,它用于在启用mint特性时,为特定的向量类型实现与mint库中对应类型的相互转换。mint库是一个提供基本数学类型(如点、向量、矩阵等)的Rust库,旨在与多个图形和数学库兼容。这个宏通过减少重复代码,使得为自定义向量类型添加与mint库中类型的转换变得更加方便。

一、macros.rs源码

macro_rules! mint_vec {($name:ident [ $($field:ident),* ] = $std_name:ident) => {#[cfg(feature = "mint")]impl<T, U> From<mint::$std_name<T>> for $name<T, U> {fn from(v: mint::$std_name<T>) -> Self {$name {$( $field: v.$field, )*_unit: PhantomData,}}}#[cfg(feature = "mint")]impl<T, U> From<$name<T, U>> for mint::$std_name<T> {fn from(v: $name<T, U>) -> Self {mint::$std_name {$( $field: v.$field, )*}}}}
}

二、宏定义

1、宏定义签名:

macro_rules! mint_vec { … }定义了一个名为mint_vec的宏。

2、宏输入参数:

($name:ident [ ( ( (field:ident),* ] = $std_name:ident)是宏的参数列表。这里:

  • name:ident是一个标识符(ident),表示要生成实现的自定义向量类型的名称。
  • [ ( ( (field:ident),* ] ,是一个可变长度的标识符列表,表示向量中的字段名称。这里的*表示这是一个重复的模式,可以匹配零个或多个字段。
  • std_name:ident是另一个标识符,表示mint库中对应的标准向量类型的名称。

3、宏体

宏的主体包含了两部分impl块,分别用于实现From转换。

  • 第一部分实现了从mint库中的向量类型(mint::std_name)到自定义向量类型(name<T, U>)的转换。
  • 第二部分实现了反向的转换,即从自定义向量类型(name<T, U>)到mint库中的向量类型(mint::std_name)的转换。
  • 在这两个实现中,field: v.是宏的重复语法,用于将自定义向量类型的每个字段映射到mint库向量类型的对应字段上。这使得转换能够直接复制字段值,而不需要手动编写每个字段的转换代码。

三、条件编译

  • #[cfg(feature = “mint”)]:这个属性指示编译器仅当启用了mint特性时才编译接下来的代码块。这允许用户通过Cargo的特性标志来控制是否包含这些实现。

四、PhantomData: - _unit: PhantomData:

这是一个类型参数U的PhantomData实例,用于在自定义向量类型中携带一个额外的类型参数而不占用实际空间。这通常用于标记或限制泛型类型的用途,而在这个宏中,它可能用于保持与mint库中类型一致的泛型签名。

五、 总结

这个宏允许开发者通过简单地指定自定义向量类型的名称、字段和对应的mint库类型,来自动生成与mint库中向量类型的相互转换实现,从而减少了重复代码并提高了代码的可维护性。


相关文章:

7 与mint库对象互转宏(macros.rs)

macros.rs代码定义了一个Rust宏mint_vec&#xff0c;它用于在启用mint特性时&#xff0c;为特定的向量类型实现与mint库中对应类型的相互转换。mint库是一个提供基本数学类型&#xff08;如点、向量、矩阵等&#xff09;的Rust库&#xff0c;旨在与多个图形和数学库兼容。这个宏…...

pytorch实现变分自编码器

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 变分自编码器&#xff08;Variational Autoencoder, VAE&#xff09;是一种生成模型&#xff0c;属于深度学习中的无监督学习方法。它通过学习输入数据的潜在分布&#xff08;Latent Distribution&#xff09;&…...

Node.js与嵌入式开发:打破界限的创新结合

文章目录 一、Node.js的本质与核心优势1.1 什么是Node.js?1.2 嵌入式开发的范式转变二、Node.js与嵌入式结合的四大技术路径2.1 硬件交互层2.2 物联网协议栈2.3 边缘计算架构2.4 轻量化运行时方案三、实战案例:智能农业监测系统3.1 硬件配置3.2 软件架构3.3 核心代码片段四、…...

Noise Conditional Score Network

NCSN p σ ( x ~ ∣ x ) : N ( x ~ ; x , σ 2 I ) p_\sigma(\tilde{\mathrm{x}}|\mathrm{x}) : \mathcal{N}(\tilde{\mathrm{x}}; \mathrm{x}, \sigma^2\mathbf{I}) pσ​(x~∣x):N(x~;x,σ2I) p σ ( x ~ ) : ∫ p d a t a ( x ) p σ ( x ~ ∣ x ) d x p_\sigma(\mathrm…...

低代码系统-产品架构案例介绍、蓝凌(十三)

蓝凌低代码系统&#xff0c;依旧是从下到上&#xff0c;从左至右的顺序。 技术平台h/iPaas 指低层使用了哪些技术&#xff0c;例如&#xff1a;微服务架构&#xff0c;MySql数据库。个人认为&#xff0c;如果是市场的主流&#xff0c;就没必要赘述了。 新一代门户 门户设计器&a…...

51单片机 02 独立按键

一、独立按键控制LED亮灭 轻触按键&#xff1a;相当于是一种电子开关&#xff0c;按下时开关接通&#xff0c;松开时开关断开&#xff0c;实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开。 #include <STC89C5xRC.H> void main() { // P20xFE;while(1){…...

2021.3.1的android studio版本就很好用

使用最新版的studio有个问题就是gradle版本也比较高&#xff0c;这样就容易出现之前项目不兼容问题&#xff0c;配置gradle可能会出现很多问题比较烦&#xff0c;所以干脆就用老版本的studio...

CSV数据分析智能工具(基于OpenAI API和streamlit)

utils.py&#xff1a; from langchain_openai import ChatOpenAI from langchain_experimental.agents.agent_toolkits import create_csv_agent import jsonPROMPT_TEMPLATE """你是一位数据分析助手&#xff0c;你的回应内容取决于用户的请求内容。1. 对于文…...

移除元素-双指针(下标)

题目 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k&#xff0c;要通过此题&#xff0c;您需要执行以下操作&#xff1a…...

蓝桥杯备赛题目练习(一)

目录 一. 口算练习题 代码如下 代码解读&#xff08;简略重点&#xff09;&#xff1a; 代码解读&#xff08;详细&#xff09;&#xff1a; 二. 小乐乐改数字 代码&#xff08;1&#xff09;&#xff1a;当做整数读取 代码&#xff08;2&#xff09;&#xff1a;当做字符…...

FortiOS 存在身份验证绕过导致命令执行漏洞(CVE-2024-55591)

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...

【多线程】线程池核心数到底如何配置?

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 前置回顾2. 动态线程池2.1 JMX 的介绍2.1.1 MBeans 介绍 2.2 使用 JMX jconsole 实现动态修改线程池2.2.…...

Windows图形界面(GUI)-QT-C/C++ - Qt Combo Box

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 一、概述 1.1 基本概念 1.2 应用场景对比 二、核心属性详解 2.1 行为控制 2.2 显示配置 三、数据操作与访问 3.1 基础数据管理 3.2 高级数据访问 四、用户交互处理 4.1 信号处…...

开源AI智能名片2 + 1链动模式S2B2C商城小程序:内容价值创造与传播新引擎

摘要&#xff1a;本文聚焦于信息爆炸时代下&#xff0c;内容价值的创造与传播。随着用户角色的转变&#xff0c;其在内容生产与传播中的价值日益凸显。同时&#xff0c;深入探讨开源AI智能名片2 1链动模式S2B2C商城小程序这一创新商业模式&#xff0c;如何借助用户创造内容并传…...

python读取excel工具:openpyxl | AI应用开发

python读取excel工具&#xff1a;openpyxl | AI应用开发 openpyxl 是一个 Python 库&#xff0c;专门用于读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件。它是处理 Excel 文件的强大工具&#xff0c;可以让你在不需要安装 Excel 软件的情况下&#xff0c;对 Excel 文件进行创建、…...

堆的基本概念

1.1 堆的基本概念 虚拟机所在目录 E:\ctf\pwn-self 进入虚拟机的pwndocker环境 holyeyesubuntu:~$ pwd /home/holyeyes holyeyesubuntu:~$ sudo ./1run.sh IDA分析 int __fastcall main(int argc, const char **argv, const char **envp) { void *v4; // [rsp20h] [rbp-1…...

Android车机DIY开发之软件篇(九) NXP AutomotiveOS编译

Android车机DIY开发之软件篇(十一) NXP AutomotiveOS编译 Google 在汽车上也提供了用于汽车的 Google 汽车服务&#xff08;GAS&#xff0c;Google Automotive Service&#xff09;&#xff0c;包含有 Google 地图、应用市场、Google 汽车助理等等。Google 汽车服务同样没有开…...

嵌入式工程师必学(143):模拟信号链基础

概述: 我们每天使用的许多电子设备,以及我们赖以生存的电子设备,如果不使用电子工程师设计的实际输入信号,就无法运行。 模拟信号链由四个主要元件组成:传感器、放大器、滤波器和模数转换器 (ADC)。这些传感器用于检测、调节模拟信号并将其转换为适合由微控制器或其他数…...

《LLM大语言模型深度探索与实践:构建智能应用的新范式,融合代理与数据库的高级整合》

文章目录 Langchain的定义Langchain的组成三个核心组件实现整个核心组成部分 为什么要使用LangchainLangchain的底层原理Langchain实战操作LangSmithLangChain调用LLM安装openAI库-国内镜像源代码运行结果小结 使用Langchain的提示模板部署Langchain程序安装langserve代码请求格…...

e2studio开发RA2E1(5)----GPIO输入检测

e2studio开发RA2E1.5--GPIO输入检测 概述视频教学样品申请硬件准备参考程序源码下载新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置GPIO口配置按键口配置按键口&Led配置R_IOPORT_PortRead()函数原型R_IOPORT_PinRead()函数原型代码 概述 本篇文章主要介绍如何…...

42-西门子1200伺服控制5轴程序 程序采用1200系列PLC,项目实现以下功能: (1)

42-西门子1200伺服控制5轴程序 程序采用1200系列PLC&#xff0c;项目实现以下功能&#xff1a; &#xff08;1&#xff09;.三轴机械手联动取放料PTO脉冲定位控制台达B2伺服 &#xff08;2&#xff09;.台达伺服速度模式应用扭矩模式应用实现收放卷 &#xff08;3&#xff09;.…...

一篇搞定2026年律所管理系统选购,避坑技巧+优质品牌全解析

据智研咨询2026年发布的《中国律所管理软件行业发展报告》显示&#xff0c;国内律所对管理系统的需求年增长率达28%&#xff0c;但近70%的律所表示选型后存在功能冗余、操作复杂、适配性差等问题&#xff0c;不仅未能提升效率&#xff0c;反而增加了办公成本。作为深耕律所管理…...

League Akari:基于LCU API的现代化英雄联盟客户端工具集

League Akari&#xff1a;基于LCU API的现代化英雄联盟客户端工具集 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 在英雄联盟游…...

Comsol 中微环谐振腔的环形波导耦合:波束包络与波动光学模块对比

Comsol微环谐振腔&#xff0c;环形波导耦和。 对比波束包络和波动光学两个不同模块。在光学领域&#xff0c;微环谐振腔因其独特的光学特性在众多应用中发挥着关键作用&#xff0c;比如光滤波、光传感等。而 Comsol 作为一款强大的多物理场仿真软件&#xff0c;为我们深入研究微…...

Audio Pixel Studio效果惊艳集锦:10类垂直场景语音生成+分离真实案例

Audio Pixel Studio效果惊艳集锦&#xff1a;10类垂直场景语音生成分离真实案例 1. 引言&#xff1a;当声音创作变得触手可及 想象一下&#xff0c;你正在为一个短视频项目寻找合适的旁白配音&#xff0c;但预算有限&#xff0c;专业配音师的价格让你望而却步。或者&#xff…...

保姆级教程:NLI-DistilRoBERTa快速部署与简单调用指南

保姆级教程&#xff1a;NLI-DistilRoBERTa快速部署与简单调用指南 1. 项目概述与核心能力 NLI-DistilRoBERTa是基于DistilRoBERTa模型的自然语言推理(Natural Language Inference)Web服务&#xff0c;专门用于分析两个句子之间的逻辑关系。这个轻量级模型保留了RoBERTa模型90…...

GTE文本向量助力智能写作:文本分类与情感倾向双重把关

GTE文本向量助力智能写作&#xff1a;文本分类与情感倾向双重把关 1. 智能写作的核心挑战&#xff1a;内容质量的多维评估 在内容创作领域&#xff0c;我们常常面临一个基本矛盾&#xff1a;如何同时保证文本的专业性和情感表达&#xff1f;传统写作辅助工具往往只能解决单一…...

革新性PDF打印解决方案:PDFtoPrinter全场景应用指南

革新性PDF打印解决方案&#xff1a;PDFtoPrinter全场景应用指南 【免费下载链接】PDFtoPrinter .Net Wrapper over PDFtoPrinter util allows to print PDF files. 项目地址: https://gitcode.com/gh_mirrors/pd/PDFtoPrinter 价值定位&#xff1a;重新定义PDF打印体验…...

string字符串基础相关知识

课程要求1.string的三种创建方式2.string常用方法空格处理&#xff0c;空值判断&#xff0c;替换操作&#xff0c;字符串截取&#xff0c;字符串拆分&#xff0c;字符索引访问拼接与性能&#xff0c;删除操作3.理解 string 不可变性&#xff0c;能在循环拼接场景中使用 StringB…...

ReACT深度解析四:从数字员工到数字文明——智能体的终极演进与文明级想象

内容定位&#xff1a;​ 未来畅想文章日期&#xff1a;​ 2026-03-26【场景引入】凌晨两点&#xff0c;南京的OpenClaw训练营早已散场&#xff0c;但服务器日志仍在跳动。一个刚被赋予“学习进化”权限的电商客服智能体&#xff0c;在完成今日第317个订单查询后&#xff0c;没有…...