看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
Caesar08: 用template又指定CString? 01/06 14:26
tyc5116: 恩~輸入字串,找到名稱相對應的enum 01/06 14:35
tyc5116: 雖然我也覺得那樣的宣告方式怪怪的 01/06 14:35
shadow0326: 不太懂想做什麼,如果只是想把字串mapping enum的話 01/06 14:56
shadow0326: 何不用unordered_map 01/06 14:56
uranusjr: 最簡單的方法是自己寫一個 map, 其他方法都很 hacky 01/06 17:42
noodleT: 是想要修改 item 不須動到其它程式碼嗎? 01/06 18:30
tyc5116: 因為用map實作,現有的程式要修改不少,所以在想說有沒有 01/06 19:29
tyc5116: 其它辦法,template可以實作的話似乎是最簡潔的方式 01/06 19:30
tyc5116: 所以上來問問看 01/06 19:30
uranusjr: 那只能老實跟你說這個用純 C++ 真的是辦不到... 01/06 21:49
uranusjr: 唯一比較像的是 macro 例如 #define TE(t1, t2) t1::t2 01/06 21:51
uranusjr: 之類的可以讓你 TE(test, item1) 但是用字串變數不可能 01/06 21:51
soheadsome: m4之類的應該可以 感覺你是想做ruby那種hash 01/06 22:32
noodleT: 不如做一個解析器,利用原始碼文字檔產生 map.cpp 01/07 00:03
druid0214: 用一個function作初始化回傳static的列表 01/07 07:11
druid0214: https://youtu.be/EJtqHLvAIZE 類似的行為 01/07 07:12
druid0214: 但是感覺你要動態初始化enum 簡稱白X 01/07 07:15
tyc5116: 原來的需求,有個現成的func,可以新增欄位到database內 01/07 10:48
tyc5116: 其中一個參數指定欄位的順序位置,原程式用enum指定位置順 01/07 10:49
tyc5116: 序,例如addtable(tablename,fieldname,type,pos) 01/07 10:50
tyc5116: 參數4丟的就是test::item1,之類的,若要新增大量欄位 01/07 10:51
tyc5116: 就會變的麻煩,其它參數都可以由外部txt or ini或得,只有 01/07 10:52
tyc5116: 這個參數不知道怎麼處理比較好 01/07 10:52
tyc5116: 雖然db不在意順序位置,但是順序亂看的時候還是會不方便.. 01/07 10:54
noodleT: 用另一個 ini 當紀錄 [enum] item0=0 01/07 23:11
Sidney0503: 你的想法就好比要C語言private繼承&變數型態隨意變化 01/09 10:58
Sidney0503: 現有的程式要修改不少 那就是設計不良 架構錯誤 01/09 10:59
Sidney0503: 那更要重購 01/09 11:00
Sidney0503: 所以建議從頭改你們的程式架構 01/09 11:00
fqstory: Class 和 Enum 是數量固定,可以窮舉if else做到(醜了點 01/15 11:36
fqstory: ) 01/15 11:36