【发布时间】:2015-07-17 15:30:00
【问题描述】:
我有一个里面有联合的结构体,如下图
typedef struct {
Type_e type;
union {
char m_char;
int m_int;
// more types. over 27 types with special types
} my_data;
} Data_t;
此结构用于开发算法,包括函数/方法内的奇异值分解 (SVD)。但是,每次我需要访问联合的元素时,我都必须使用 switch(超过 10 个 switch() 将用于 SVD)。根据我有限的理解,在每个实例中,所有工会成员都持有相同的价值。我可以使用 char 成员并将其转换为不同的类型吗?例如:
Data_t lData;
// initialize lData with some values
int x = (int)(lData.my_data.m_char).
以及这将如何用于转换指针?
即使使用强制转换,在某些情况下我仍然需要使用 switch。有没有办法避免使用开关?我尝试使用不同的 struct 格式(如 Declare generic variable type 中所述),看起来使用 union 更具可读性。以前,没想到就结束了:(
这个例子在上一篇文章中提到过,里面也有类似switch的例子
void vector(Data_t *vec, UInt32_t start_element, UInt32_t end_element)
{
UInt32_t i;
// check *vec is not null
if (!vec)
{
// Write error
}
Data_t x;
for (i =start_element; i <= end_element; i++)
{
switch (vec[i].type)
{
case UINT32: x.my_data.m_int = vec[i].my_data.m_int; break;
// more possible cases
default:
break;
}
}
}
【问题讨论】:
-
什么开关?能给我举个例子吗?我不清楚这个问题。
-
你有这些结构/联合的数组吗?当其中 100 个具有相同类型时,您是否尝试更有效地访问它们?还是您想编写更简洁的代码? (也就是说,你是想优化计算机的时间,还是你的?)
-
@Eugene Sh,我添加了一个简单的例子,我正在研究的那个更复杂,需要算术运算(我不想让问题复杂化)
-
@SteveSummit 我正在尝试优化计算成本,同时使用有效的编码方式(对于 SVD 函数,我需要在三个嵌套的 for 中进行多个开关。如果这有意义:)
-
switch嵌套在for内,嗯?知道了。看我的回答。