typedef enum提供了一种方便的方法来描述一组名称-值对。有没有办法将它们链接起来,以便在所有级别使用enum创建更深层次的结构?
例如,我有以下内容:
typedef enum logic {ALPHA=0, BETA=1} a_t;
typedef enum logic {GAMMA=0, DELTA=1} b_t;
typedef enum logic {ZETA=0, ETA=1} c_t;
...我想创建一个由a_t和b_t组成的变量c。这个是可能的吗?
类似于:
a_t b_t c;所以在c的每个维度上,我都可以有enums。
编辑:一些澄清-假设a_t、b_t和c_t是不可变的,因为它们是自动生成的。这样的枚举有成百上千种。我想根据需要创建更大的结构,因为自动生成它们的所有组合会使代码变得太大和混乱。
例如,假设my a_t描述主设备的数量,b_t描述从设备的数量。我想要创建一种结构,在我的信号中具有这种层次结构,同时允许enum为它们提供易读性和易用性。
所以,就像这样:
c[MASTER_0][SLAVE_0]
c[MASTER_0][SLAVE_1]
c[MASTER_1][SLAVE_0]
c[MASTER_1][SLAVE_1]发布于 2020-02-07 23:04:02
您可能指的是associative array,例如:
c[ALPHA] = BETA;如果是这样,您可以简单地将其称为:
b_t c[a_t];这意味着创建一个关联数组c,它的键是枚举a_t,值是枚举b_t。如果您愿意,您可以继续:)
typedef enum logic {ALPHA=0, BETA=1} a_t;
typedef enum logic {GAMMA=0, DELTA=1} b_t;
typedef enum logic {BAD_AT=0, GREEK_LETTERS=1} c_t;
c_t my_data_structure[a_t][b_t];
// Assigning a value
my_data_structure[ALPHA][GAMMA] = GREEK_LETTERS;请参阅EDA Playground here上的示例。
另外,我认为您稍微误解了typedef的用法。它并不确切地描述一组名称-值对,而是为数据类型指定了一个新名称。实际上是enum创建了一组“名称-值对”,但我要澄清的是,它本质上是将标识符分配给值。如果你能解释一下这个应用程序,得到一个更清晰的答案,那将会有所帮助。
发布于 2020-02-07 23:59:41
您不能从另一个或一组其他类型定义创建一个enum类型定义。有些人可能称之为扩展枚举。对于同一个值,也不能有多个名称的enum。
您可以做的是拥有一个具有名称/值对的关联数组,并将这些数组连接在一起。
int a[string], b[string], c[string];
initial begin
a = '{"ALPHA":0, "BETA":1};
b = '{"GAMMA":0, "DELTA":1};
c = a;
foreach(b[s]) c[s]=b[s];
end还有一些方法可以收集每个枚举类型的名称来初始化关联数组。
https://stackoverflow.com/questions/60106883
复制相似问题