我正在為 Uni 專案在 alegro 中制作游戲,并希望使用字典或哈希圖之類的東西來最小化代碼中每個動作的 if 數量,并能夠實作一些不同的基本皮膚機制。問題是我不知道如何實作這樣的事情。我已經使用 C 有一段時間了,所以我對動態記憶體分配和控制復雜程式非常滿意。你們對我如何做到這一點有什么建議嗎?
這個想法是建立一個字典,其中鍵是字串,值是函式,所以我可以通過索引對函式進行操作
uj5u.com熱心網友回復:
正如 Barmar 所提到的,char*如果您的函式具有相同的回傳型別,您可以利用哈希表映射到函式指標。如果您的情況不嚴格要求字串,您可以使用帶有宏的哈希表的簡化版本。
#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;
}
uj5u.com熱心網友回復:
如果您使用的是 POSIX 系統,則可以使用標準庫函式 hcreate/hsearch/hdestroy 來管理以字串為鍵的單個哈希表。在 GNU 系統(任何使用 glibc 的系統)上,您可以使用這些函式的 _r 版本來管理多個哈希表。
哈希表非常小—— ENTRY 型別是硬編碼的(在<search.h>)
typedef struct entry {
char *key;
void *data;
} ENTRY;
有關更多詳細資訊,請參閱 hsearch(3) 手冊頁。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/327478.html
