作者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/cn.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