在C/C 中啟用非整數值
問題:
問題:確定操作基於🎜>問題:
確定操作基於🎜>問題:MATCH("asd") some c++ code MATCH("bqr") ... the buffer for the match is in _buf MATCH("zzz") ... user.YOURSTUFF /*ELSE optional */ ENDMATCH(xy_match) xy_match("bqr",youruserdata);
確定操作基於🎜>問題:
確定操作基於🎜>問題:
#include <utility> #include <algorithm> #include <initializer_list> template <typename KeyType, typename FunPtrType, typename Comp> void Switch(const KeyType &value, std::initializer_list<std::pair<const KeyType, FunPtrType>> sws, Comp comp) { // ... search and invoke code } Switch("ger",{ {"asdf",[]{ printf("0\n"); }}, {"bde",[]{ printf("1\n"); }}, {"ger",[]{ printf("2\n"); }} },[](const char *a,const char *b){ return strcmp(a,b)<0;});
確定操作基於🎜>問題:
確定操作基於非POD 常數元素(例如字串)需要諸如嵌套之類的解決方法ifs,這可能效率低且複雜。 switch 語句是為整數值設計的,不直接支援非整數。解決方案 1:宏和模板魔法(fastmatch.h)
使用巨集和模板,可以在編譯時建立展開的二分搜尋。語法簡潔,但需要排序的 case 分支。此方法產生一個帶有隱式中斷的函數,該函數將相關匹配分配給緩衝區。 解決方案 2:C 11 Lambda 和初始化清單在 C 11 中、lambda 和初始化清單提供了更清晰的解決方案。此方法對鍵值對列表執行二分搜索,其中鍵對應於非整數值,值是函數指標。然後呼叫找到的函數。 解3:編譯時Trie (cttrie)在C 11 中,編譯時trie 方法可以處理未排序的毫不費力地進行案例分支。高階元程式設計技術在編譯時產生搜尋特里樹,利用每個特里樹節點中的 switch 語句來有效地重新導向執行流程。 完整的實作可在 github 上找到:smilethax/cttrie。以上是如何在 C/C 中有效率地實現非整數值的 Switch 語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!