C++中enum与字符串或CString互相转换的方法

来源:互联网 发布:大数据经济学 编辑:程序博客网 时间:2024/06/02 06:36

        C++中没有专门为enum与字符串或CString互相转换的直接方法,但是工作中会常遇到相互转换的场景。下面介绍一种自己实现的方法,首先得定义一个enum类型,同时,定义一个与之对应的字符串类型,然后,可以相互转换了。

enum E_ANIMAL {    E_ANIMAL_EAGLE = 0,E_ANIMAL_MAGPIE,E_ANIMAL_PIG,E_ANIMAL_CARP,E_ANIMAL_END};const CString ANIMAL[] = {    "E_ANIMAL_EAGLE","E_ANIMAL_MAGPIE","E_ANIMAL_PIG","E_ANIMAL_CARP",    "E_ANIMAL_END"};

bool fnConverCStringToEnum(const CString csParam,E_ANIMAL &eName){CString csAnimalName;int iCount = 0;eName = E_ANIMAL_END;csAnimalName = csParam;iCount = sizeof(ANIMAL) / sizeof(ANIMAL[0]);for(int i=0;i<iCount;i++){    if(0 == csAnimalName.CompareNoCase(ANIMAL[i])){eName = E_ANIMAL(i);break;}else{continue;}if(E_ANIMAL_END == eName){return false;}}cout << "eName is: " << eName << endl;return true;}bool fnConverEnumToCString(const E_ANIMAL eParam,CString &csName){E_ANIMAL eTemp = E_ANIMAL_END;int idx = 0;if(eParam > E_ANIMAL_END){return false;}eTemp = eParam;idx = static_cast<enum>(eTemp);csName = ANIMAL[idx];cout << "csName is: " << csName.GetBuffer(0) << endl;return true;}int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]){int nRetCode = 0;// initialize MFC and print and error on failureif (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)){// TODO: change error code to suit your needscerr << _T("Fatal Error: MFC initialization failed") << endl;nRetCode = 1;}else{// TODO: code your application's behavior here.CString csAnimalName;E_ANIMAL eAnimalName;        if(!fnConverEnumToCString(E_ANIMAL_CARP,csAnimalName)){return false;}if(!fnConverCStringToEnum("E_ANIMAL_CARP",eAnimalName)){return false;}cout << "csAnimalName is: " << csAnimalName.GetBuffer(0) << endl;cout << "eAnimalName is: " << eAnimalName << endl;}return nRetCode;}


原创粉丝点击