首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何从结构列表中声明枚举?

如何从结构列表中声明枚举?
EN

Stack Overflow用户
提问于 2022-08-18 06:16:24
回答 1查看 59关注 0票数 1

是否可以从一个结构声明列表中声明一个枚举,并将它们作为其变体来包含?

就像这样(未包装):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct CommandA {
    // --snip--
}

struct CommandB {
    // --snip--
}

enum Commands {
  CommandA(CommandA),
  CommandB(CommandB),
}

我的目标是使用structs来声明串行协议的命令,而不必声明重复的类型(我已经计算出的其他类型)。

我想做这样的事情:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#[derive(Command)]
#[repr(C, packed(1))]
struct CommandA {
  // --snip--
}


#[derive(Command)]
#[repr(C, packed(1))]
struct CommandB {
  // --snip--
}

或者有macro_rules的东西也会很棒。

不使用trait Command {}的原因是因为协议“用户”中的一个将是no_std (一个微控制器),所以我不能使用Box<dyn Command>,而枚举作为该类型的“所有捕获”容器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-18 06:32:50

您可以使用宏来模拟这种行为。缺点是,这需要在一个地方实现所有的结构。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
macro_rules! enum_of_structs {
    ($(#[$($emeta:meta),*])*
    $evis:vis enum $name:ident { 
        $($(#[$($smeta:meta),*])*
        $svis:vis $strct:ident {
            $($fvis:vis $field:ident : $ty:ty),* $(,)? 
        }),* $(,)?
    }) => {
        $(#[$($emeta),*])*
        $evis enum $name {
            $($strct($strct)),*
        }
        $(
        $(#[$($smeta),*])*
        $svis struct $strct {
            $($fvis $field: $ty),*
        })*
    };
}

使用示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
enum_of_structs! {
    #[derive(Debug)]
    enum Command {
        #[derive(Debug)]
        #[derive(Clone)]
        pub CommandA {
            pub field1: u32,
            field2: String,
        },
        #[derive(Debug)]
        CommandB {
            field2: usize,
        }
    }
}

游乐场

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73404638

复制
相关文章
如何从列表中获取元素
观察URAM的物理管脚,不难发现A/B端口都有相应的地址、使能、读写控制信号。与BRAM不同的是URAM的读写使能信号是同一个管脚RDB_WR_A/B,其为0时执行读操作,为1时执行写操作,这意味着一旦A/B端口独立,同一端口的读写操作就无法同时发生,因此,如果采用上一篇文章中介绍的方法将其配置为两个独立的单端口RAM,其读写行为与常规的单端口RAM是不同的,进一步而言,此时的读写行为类似于NO_Change模式。
Lauren的FPGA
2019/10/30
17.4K0
TypeScript - 类型声明、枚举、函数、接口
4.自定义类型 当一些复杂类型需要多次使用,可以通过type来自定义类型,便于复用
WahFung
2020/08/22
1.8K0
如何从 Python 列表中删除所有出现的元素?
在 Python 中,列表是一种非常常见且强大的数据类型。但有时候,我们需要从一个列表中删除特定元素,尤其是当这个元素出现多次时。本文将介绍如何使用简单而又有效的方法,从 Python 列表中删除所有出现的元素。
网络技术联盟站
2023/06/01
12.5K0
Python-声明数组(列表)
在 Python 中,数组被称为列表(list),定义一个列表需要使用中括号 []
用户9006224
2023/04/22
7080
C结构、联合、枚举
使用struct关键词,可以创造新的类型。 关键词struct取自structure,中文翻译为结构。 这种由多个不同的数据类型组成的类型,被称为结构。
WuShF
2023/03/08
5210
C结构、联合、枚举
C# 中的“智能枚举”:如何在枚举中增加行为
在这个示例中,我们定义了一个名为 Weekday 的枚举,其中包括每个星期的日子。然后在 Main 方法中,我们将 today 变量设置为 Tuesday,并使用 ToString() 方法将其转换为字符串。
郑子铭
2023/08/30
3330
C# 中的“智能枚举”:如何在枚举中增加行为
C结构、联合、枚举
int arr[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
WuShF
2023/03/06
5810
C结构、联合、枚举
【说站】Python如何从列表中获取笛卡尔积
Python如何从列表中获取笛卡尔积 1、可以使用itertools.product在标准库中使用以获取笛卡尔积。 from itertools import product   somelists = [    [1, 2, 3],    ['a', 'b'],    [4, 5] ]   result = list(product(*somelists)) print(result) 2、迭代方法。 def cartesian_iterative(pools):   result = [[]]  
很酷的站长
2022/11/24
8.8K0
【说站】Python如何从列表中获取笛卡尔积
如何从 Python 中的字符串列表中删除特殊字符?
在进行字符串处理和文本分析时,有时我们需要从字符串列表中删除特殊字符。特殊字符可能是空格、标点符号、换行符等,在某些情况下它们可能干扰我们的文本处理或分析任务。Python 提供了多种方法来删除字符串列表中的特殊字符。本文将详细介绍在 Python 中删除字符串列表中特殊字符的几种常用方法,并提供示例代码帮助你理解和应用这些方法。
网络技术联盟站
2023/06/01
8.4K0
java对象组声明_如何在Java中声明对象数组?
可以创建对象类数组,该数组可以接受任何类型的对象。在此类数组上运行期间,可以使用instanceof运算符。
全栈程序员站长
2022/08/30
3.8K0
【C 语言】结构体 ( 结构体类型定义 | 结构体类型别名 | 声明结构体变量的三种方法 | 栈内存中声明结构体变量 | 定义隐式结构体时声明变量 | 定义普通结构体时声明变量 )
使用 struct 关键字 , 定义普通的 结构体类型 , 这是定义了 固定大小内存块别名 , 此时还没有给 结构体 分配内存 ;
韩曙亮
2023/03/29
2.3K0
特殊类型结构--枚举
枚举 介绍 在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。 枚举在C/C++/c#中,是一个被命名的整型常数的集合, 枚举在日常生活中很常见。
跋扈洋
2021/01/29
4990
Java中如何声明数组「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/137070.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/05
1.7K0
Python - 从字典列表中删除字典
字典是python的一个非常常用的功能,用于根据用户需要在其中存储数据。另一个典型的过程涉及编辑或操作此数据。要成为一名高效且快速的程序员,您必须弄清楚如何从字典列表中删除字典。有许多技术可以从词典列表中删除字典,本文将介绍这些技术。
很酷的站长
2023/08/11
2580
Python - 从字典列表中删除字典
【译】SwiftUI中使用ForEach枚举列表
因此我们需要使用另外的ForEach初始化方法init(_:id:content:) 来使用key path显示的指定元素的ID。这里例子中是\.1.id,其中.1表示元组中第二个元素person,.id自然是person的唯一值key。
小刀c
2022/09/21
7880
【译】SwiftUI中使用ForEach枚举列表
结构体的优化声明
声明一个结构体的时候,因为考虑到内存的对齐。例如,int型的变量,需要4个字节,那么它在存储的时候就需要在地址能够被4个字节整除的地方开始申请。 例如我们申请下面这样的一个结构体: struct{ char a; int b; char c; } node1; 在内存分配的时候,char占一个字节,int 占四个字节。 c语言在进行内存分配的时候,需要根据最大的宽度来进行分配。如我们例子中,int需要4个字节,在分配char型的时候,虽然char只占用一个字节,但是也需要从4个字节的位置开始分配。 分配的内
用户1154259
2018/01/17
8670
从嵌套结构中取值时如何编写兜底逻辑
对a解构时赋予的默认值(空数组),仅当b.a的值为undefined时才会生效,如果b.a的值为null,默认值就无法生效,使得第二行调用map方法的代码直接报错,所以第一行代码兜底并没有做好。
大史不说话
2020/11/03
2.9K0
如何给结构体内声明的二维数组赋值
最近在用C++做一个象棋小游戏,为了规避全局变量的使用,想使用结构体来声明需要使用的数据。给其中用来存储棋盘信息的二维数组赋值时却遇到了问题:
英雄爱吃土豆片
2020/10/29
2.5K0
ts中枚举
填坑,官方文档:https://www.tslang.cn/docs/handbook/enums.html
阿超
2022/08/21
5440
ts中枚举
ASP.NET Core中结合枚举和资源文件显示列表
模型类的某些属性以枚举形式出现,我们希望在打开编辑表单时在选择列表中显示枚举值。有时我们想要枚举元素名称,但有时我们想要使用自定义名称甚至翻译。 这个例子演示了如何获取枚举元素名称以选择ASP.NET Core上的列表。
yoyofx
2020/05/13
1.5K0

相似问题

结构中的枚举声明

30

枚举和结构的声明

21

在哪里声明枚举结构?

20

从枚举中获取枚举列表

12

将枚举值(在结构中声明)赋给结构内具有相同枚举类型的变量

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文