C 中以函数作为值的字典
Dictionary in C with functions as values
我正在为一个 Uni 项目制作一个 alegro 游戏,我想使用字典或哈希图之类的东西来最小化代码中每个动作的 ifs 数量,并能够实现一些不同的基本皮肤机制。问题是我不知道如何实现这样的事情。我使用 C 已经有一段时间了,所以我对动态内存分配和控制复杂程序感到非常自在。你们对我如何做到这一点有什么建议吗?
我的想法是构建一个字典,其中的键是字符串,值是函数,这样我就可以通过索引对函数进行操作
正如 Barmar 提到的,如果您的函数具有相同的 return 类型,您可以使用散列 table 将 char*
映射到函数指针。如果您的情况并不严格需要字符串,您可以使用带有宏的散列 table 的简化版本。
#define A 0
#define B 1
#define C 2
void a() {}
void b() {}
void c() {}
void (*funcs[3])() = {
[A] = &a,
[B] = &b,
[C] = &c,
};
int main(int argc, char *argv[]) {
(*funcs[B])();
return 0;
}
如果您使用的是 POSIX 系统,您可以使用标准库函数 hcreate/hsearch/hdestroy 以字符串作为键来管理单个散列 table。在 GNU 系统(任何使用 glibc 的系统)上,您可以使用这些函数的 _r 版本来管理多个哈希 tables.
散列 table 非常小 -- ENTRY 类型被硬编码(在 <search.h>
中)为
typedef struct entry {
char *key;
void *data;
} ENTRY;
有关详细信息,请参阅 hsearch(3) 手册页。
我正在为一个 Uni 项目制作一个 alegro 游戏,我想使用字典或哈希图之类的东西来最小化代码中每个动作的 ifs 数量,并能够实现一些不同的基本皮肤机制。问题是我不知道如何实现这样的事情。我使用 C 已经有一段时间了,所以我对动态内存分配和控制复杂程序感到非常自在。你们对我如何做到这一点有什么建议吗?
我的想法是构建一个字典,其中的键是字符串,值是函数,这样我就可以通过索引对函数进行操作
正如 Barmar 提到的,如果您的函数具有相同的 return 类型,您可以使用散列 table 将 char*
映射到函数指针。如果您的情况并不严格需要字符串,您可以使用带有宏的散列 table 的简化版本。
#define A 0
#define B 1
#define C 2
void a() {}
void b() {}
void c() {}
void (*funcs[3])() = {
[A] = &a,
[B] = &b,
[C] = &c,
};
int main(int argc, char *argv[]) {
(*funcs[B])();
return 0;
}
如果您使用的是 POSIX 系统,您可以使用标准库函数 hcreate/hsearch/hdestroy 以字符串作为键来管理单个散列 table。在 GNU 系统(任何使用 glibc 的系统)上,您可以使用这些函数的 _r 版本来管理多个哈希 tables.
散列 table 非常小 -- ENTRY 类型被硬编码(在 <search.h>
中)为
typedef struct entry {
char *key;
void *data;
} ENTRY;
有关详细信息,请参阅 hsearch(3) 手册页。