[問題] template 字串轉enum

看板C_and_CPP作者 (累人啊....)時間8年前 (2017/01/06 05:55), 編輯推噓7(8123)
留言32則, 9人參與, 最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) win8 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) vc2010,MFC 問題(Question): class test{ ... enum { item0, item1, item2, } } template<typename T1,typename T2> int TransEnum(const T1& A,const T2& B) { ... } 預期的正確結果(Expected Output): CString A = "test"; CString B = "item1"; int num = TransEnum(A,B); //num可以得到1 程式碼(Code):(請善用置底文網頁, 記得排版) 還不知道要怎麼寫,直接要答案也不太禮貌,但可以給我一點提示嗎?謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.228.234.239 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1483682136.A.1AF.html

01/06 14:26, , 1F
用template又指定CString?
01/06 14:26, 1F

01/06 14:35, , 2F
恩~輸入字串,找到名稱相對應的enum
01/06 14:35, 2F

01/06 14:35, , 3F
雖然我也覺得那樣的宣告方式怪怪的
01/06 14:35, 3F

01/06 14:56, , 4F
不太懂想做什麼,如果只是想把字串mapping enum的話
01/06 14:56, 4F

01/06 14:56, , 5F
何不用unordered_map
01/06 14:56, 5F

01/06 17:42, , 6F
最簡單的方法是自己寫一個 map, 其他方法都很 hacky
01/06 17:42, 6F

01/06 18:30, , 7F
是想要修改 item 不須動到其它程式碼嗎?
01/06 18:30, 7F

01/06 19:29, , 8F
因為用map實作,現有的程式要修改不少,所以在想說有沒有
01/06 19:29, 8F

01/06 19:30, , 9F
其它辦法,template可以實作的話似乎是最簡潔的方式
01/06 19:30, 9F

01/06 19:30, , 10F
所以上來問問看
01/06 19:30, 10F

01/06 21:49, , 11F
那只能老實跟你說這個用純 C++ 真的是辦不到...
01/06 21:49, 11F

01/06 21:51, , 12F
唯一比較像的是 macro 例如 #define TE(t1, t2) t1::t2
01/06 21:51, 12F

01/06 21:51, , 13F
之類的可以讓你 TE(test, item1) 但是用字串變數不可能
01/06 21:51, 13F

01/06 22:32, , 14F
m4之類的應該可以 感覺你是想做ruby那種hash
01/06 22:32, 14F

01/07 00:03, , 15F
不如做一個解析器,利用原始碼文字檔產生 map.cpp
01/07 00:03, 15F

01/07 07:11, , 16F
用一個function作初始化回傳static的列表
01/07 07:11, 16F

01/07 07:12, , 17F
01/07 07:12, 17F

01/07 07:15, , 18F
但是感覺你要動態初始化enum 簡稱白X
01/07 07:15, 18F

01/07 10:48, , 19F
原來的需求,有個現成的func,可以新增欄位到database內
01/07 10:48, 19F

01/07 10:49, , 20F
其中一個參數指定欄位的順序位置,原程式用enum指定位置順
01/07 10:49, 20F

01/07 10:50, , 21F
序,例如addtable(tablename,fieldname,type,pos)
01/07 10:50, 21F

01/07 10:51, , 22F
參數4丟的就是test::item1,之類的,若要新增大量欄位
01/07 10:51, 22F

01/07 10:52, , 23F
就會變的麻煩,其它參數都可以由外部txt or ini或得,只有
01/07 10:52, 23F

01/07 10:52, , 24F
這個參數不知道怎麼處理比較好
01/07 10:52, 24F

01/07 10:54, , 25F
雖然db不在意順序位置,但是順序亂看的時候還是會不方便..
01/07 10:54, 25F

01/07 23:11, , 26F
用另一個 ini 當紀錄 [enum] item0=0
01/07 23:11, 26F

01/09 10:58, , 27F
你的想法就好比要C語言private繼承&變數型態隨意變化
01/09 10:58, 27F

01/09 10:59, , 28F
現有的程式要修改不少 那就是設計不良 架構錯誤
01/09 10:59, 28F

01/09 11:00, , 29F
那更要重購
01/09 11:00, 29F

01/09 11:00, , 30F
所以建議從頭改你們的程式架構
01/09 11:00, 30F

01/15 11:36, , 31F
Class 和 Enum 是數量固定,可以窮舉if else做到(醜了點
01/15 11:36, 31F

01/15 11:36, , 32F
01/15 11:36, 32F
文章代碼(AID): #1ORp5O6l (C_and_CPP)