【发布时间】:2020-06-19 18:00:00
【问题描述】:
假设我有这段代码,有 2 个结构和一个接收这 2 个结构作为参数的大函数:
typedef struct
{
int field_A;
int field2_A;
} A;
typedef struct
{
int field_B;
int field2_B;
} B;
void function_need_refactor(A *a, B *b)
{
for(i = 0; i < SIZE; i++)
{
do_something(a->field_A);
}
for(i = 0; i < SIZE; i++)
{
do_something(b->field2_B);
}
}
如何将两个 for 循环替换为单个函数?我考虑过为每个结构使用 void 指针和标识符,但无法找到答案。有没有一种干净的方法来重构它还是不可能的?
void refactored_function(void* my_struct, char type_identifier)
{
//code to identify the type
for(i=0; i < SIZE; i++)
{
do_something((cast)my_struct->????);
}
}
【问题讨论】:
-
这个例子似乎有点做作,所以我不确定我是否理解这样做的动机。在上面的示例中,您可以轻松地将主体连接到一个循环中,这似乎比切换两个不同的结构要干净得多,假设您只有 2 个。
-
它总是一个只包含整数的结构吗?
标签: c pointers struct refactoring void