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

        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 E_ANIMAL_END)
	{
		return false;
	}
	eTemp = eParam;
	idx = static_cast(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 failure
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
	{
		// TODO: change error code to suit your needs
		cerr << _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;
}
C++中enum与字符串或CString互相转换的方法_第1张图片

你可能感兴趣的:(C++)