2010-11-29 2 views
0

Как преобразовать CString в тип Enum в MFC (VC++)?Преобразование CString в тип Enum в MFC (VC++)?

У меня есть один метод, который принимает входной параметр как Enum, но я передаю ему значение Cstring, как я могу преобразовать его в перечисление.

CString strFolderType = strFolderType.Right(strFolderType.GetLength()-(fPos+1)); 
m_strFolderType = strFolderType ; 

У меня есть один метод, как

ProtocolIdentifier(eFolderType iFolderType) 

where enum eFolderType 
{ 
    eFTP = 1, 
    eCIFS, 
    eBOTH 
}; 


now when i am calling like this : 
ProtocolIdentifier(m_strFolderType); 



It says cannot convert CString to eFolderType ... 
How to resolve this ? 

ответ

1

Почему m_strFolderType строка? Похоже, что это должно быть eFolderType.

Нет автоматического способа преобразования CString в enum (который действительно является целым числом). Значения eFTP, eCIFS и eBOTH не являются строками, и компилятор не будет рассматривать их как таковые.

Передача целого числа в виде строки является уродливой. Вы должны передать eFolderType в качестве аргумента. Если вы должны передать строку (возможно, она произошла из некоторой сериализации, которая вернула строку), вам нужно будет сделать что-то вроде этого:

eFolderType result = /* whichever should be the default*/ ; 
if (m_strFolderType == _T("eFTP")) { 
    result = eFTP; 
} else if (m_strFolderType == _T("eCIFS")) { 
    result = eCIFS; 
} else if (m_strFolderType == _T("eBOTH")) { 
    result = eBOTH; 
} else { 
    // Invalid value was passed: either use the default value or 
    // treat this as an error, depending on your requirements. 
}