我们之前有了解过,过程宏有三种,分别是函数宏(Function-like,其实叫函数式过程宏会好一点,但是太长了,所以后面同一去掉中间一段,另外两个宏同理),属性宏(Attribute)以及派生宏(Derive)。 所以接下来分三小章节来介绍下它们。 不过在介绍之前,我们还需要了解下过程宏的一些点。 和声明宏不同的是,过程宏使用函数的...
派生宏是指可以通过#[derive]属性为enum , struct, union做一些通用的traits的复用,比如我们最常见到的Debug, Clone, Copy等trait, 下面是为Point结构体添加Debugtrait。 #[derive(Debug)]structPoint{x:i32,y:i32} 其中#[derive(Debug)]中的Debug是派生宏的名称,这句话便捷的为Point结构体实现了Debugtrait。当...
Derive macro helper attributes - 派生宏辅助属性 Tool attributes - 工具属性 Built-in attributes - 内建属性 Macro Attributes 宏属性 宏属性,也叫属性宏。属于过程宏的一种。 定义过程宏的时候,使用#[proc_macro_attribute],加一个固定签名的函数(详见过程宏一章)。 #[proc_macro_attribute] pub fnreturn_as...
里面那个#[helper]就是一个派生宏辅助属性。 Tool Attributes 工具属性 工具属性。Rust 还允许外部工具定义它们自己的属性,并且在独立的命名空间下面。比如: // Tells the rustfmt tool to not format the following element. #[rustfmt::skip] struct S { } // Controls the "cyclomatic complexity" threshold...
属性宏是 active 的。 所有其它属性是 insert 的。 属性的分类 Rust 中的属性,可以分为以下四大类。 Macro attributes - 宏属性 Derive macro helper attributes - 派生宏辅助属性 Tool attributes - 工具属性 Built-in attributes - 内建属性 Macro Attributes 宏属性 ...
属性宏是 active 的。 所有其它属性是 insert 的。 属性的分类 Rust 中的属性,可以分为以下四大类。 Macro attributes - 宏属性 Derive macro helper attributes - 派生宏辅助属性 Tool attributes - 工具属性 Built-in attributes - 内建属性 Macro Attributes 宏属性 ...
Macro attributes - 宏属性 Derive macro helper attributes - 派生宏辅助属性 Tool attributes - 工具属性 Built-in attributes - 内建属性 Macro Attributes 宏属性 宏属性,也叫属性宏。属于过程宏的一种。 定义过程宏的时候,使用#[proc_macro_attribute],加一个固定签名的函数(详见过程宏一章)。
过程宏的三种类型在使用上有所不同,函数宏功能最为强大,可以修改输入的token树。属性宏定义外部属性并与项关联,派生宏则是针对derive属性的特殊宏。辅助属性提供额外的自定义能力,用于对项的字段或变体进行注释。过程宏的学习重点在于理解其原理和应用,包括如何定义宏、处理token流以及处理错误。在实际...
在Rust编译器的源代码中,rust/compiler/rustc_builtin_macros/src/deriving/generic/mod.rs文件负责实现通用派生宏。这些宏允许用户自动导出一些常见的trait实现以及定义结构体和枚举类型。 下面是对于每个结构体和枚举类型的详细介绍: TraitDef<'a>结构体:表示要为结构体或枚举实现的Trait的定义。它持有Trait名称、Tra...
另一方面,Rust 虽然没有任何自省功能,但它拥有成熟的代码生成机制,特别是其声明式和过程宏。因此本文将重点讨论 Rust 的过程宏,尤其是派生宏(derive macro)。我们将通过两个示例展示派生宏如何解决问题,分析其工作原理,以及我们如何为 C++26 提出截然不同的解决方案。