Mar*_*som 27
A std::map<std::string, MyEnum>
(或unordered_map
)可以轻松完成.填充地图与切换语句一样繁琐.
Naw*_*waz 24
使用std::map<std::string, Enum>
和使用boost::map_list_of
可以轻松初始化它.
例,
enum X
{
A,
B,
C
};
std::map<std::string, X> xmap = boost::map_list_of("A", A)("B", B)("C",C);
Run Code Online (Sandbox Code Playgroud)
Guy*_*y L 11
在某处看到了这个例子
#include <map>
#include <string>
enum responseHeaders
{
CONTENT_ENCODING,
CONTENT_LENGTH,
TRANSFER_ENCODING,
};
// String switch paridgam
struct responseHeaderMap : public std::map<std::string, responseHeaders>
{
responseHeaderMap()
{
this->operator[]("content-encoding") = CONTENT_ENCODING;
this->operator[]("content-length") = CONTENT_LENGTH;
this->operator[]("transfer-encoding") = TRANSFER_ENCODING;
};
~responseHeaderMap(){}
};
Run Code Online (Sandbox Code Playgroud)
我用这个"技巧"> http://codeproject.com/Articles/42035/Enum-to-String-and-Vice-Versa-in-C
后
enum FORM {
F_NONE = 0,
F_BOX,
F_CUBE,
F_SPHERE,
};
Run Code Online (Sandbox Code Playgroud)
插入
Begin_Enum_String( FORM )
{
Enum_String( F_NONE );
Enum_String( F_BOX );
Enum_String( F_CUBE );
Enum_String( F_SPHERE );
}
End_Enum_String;
Run Code Online (Sandbox Code Playgroud)
如果enum中的值不是dublicate,则工作正常.
代码示例
enum FORM f = ...
const std::string& str = EnumString< FORM >::From( f );
Run Code Online (Sandbox Code Playgroud)
反之亦然
assert( EnumString< FORM >::To( f, str ) );
Run Code Online (Sandbox Code Playgroud)
没有"内置方式",但有一些方法可以通过将对value-name存储在数组中来实现
enum myEnum
{
enumItem0,
enumItem1,
enumItem7 = 7,
enumItem8
};
std::vector<std::pair<myEnum,std::string>> gMap;
#define ADDITEM(x) gMap.push_back(std::pair<myEnum,std::string>(x,#x));
Run Code Online (Sandbox Code Playgroud)
.....
ADDITEM(enumItem0);
ADDITEM(enumItem1);
ADDITEM(enumItem7);
ADDITEM(enumItem8);
Run Code Online (Sandbox Code Playgroud)
这对我有用:
enum NODES { Cone = 1, BaseColor = 2, NONE = 0 };
std::map<std::string, NODES> nodeMap;
nodeMap["Cone"] = NODES::Cone;
nodeMap["BaseColor"] = NODES::BaseColor;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
74634 次 |
最近记录: |