说我有以下代码:
struct test* t1;
t1 = get_t(1);
Run Code Online (Sandbox Code Playgroud)
......在哪里get_t:
struct test* get_t(int);
Run Code Online (Sandbox Code Playgroud)
如何重构上面的代码并将其放入函数中?类似于以下内容:
void r1(?* t, ?* (fn*)(int)) {
t = fn(1);
}
/* ... */
struct test* t1;
r1(t1, &get_t);
Run Code Online (Sandbox Code Playgroud)
use void *param,一个指向任何东西的指针......通常在 glib 中用作gpointer
我有两个想法:
[1] 传递void指向变量/对象的指针,并在函数中对其进行类型转换。
[2] 将所有数据类型与一个整数数据类型结合起来,这将标识联合中的哪个数据类型变量确实保存了实际数据。将此联合作为值或作为void *
struct _unknown {
union {
int a;
float b;
char c;
double d;
} data;
int type;
} unknown;
.
.
.
if (unknown.type == FLOAT)
{
/* Process variable b */
}
else if (unknown.type == INT)
{
/* Process variable a */
}
.
.
.
Run Code Online (Sandbox Code Playgroud)
像这样的东西。
您可以散列定义FLOAT,并INT和他人的独特价值。
或者干脆
struct _unknown {
void *data;
int type;
} unknown;
.
.
.
if (unknown == FLOAT)
{
/* process (float *) data */
}
else if (unknown == INT)
{
/* process (int *) data */
}
else if (unknown == MY_DATA_TYPE)
{
/* process (my_data_type *) data */
/* where my_data_type could be a typedef, or struct */
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6783 次 |
| 最近记录: |