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