我有一段与此非常相似的代码:
class someclass
{
public:
enum Section{START,MID,END};
vector<Section> Full;
void ex(){
for(int i=0;i<Full.size();i++)
{
switch (Full[i])
{
case START :
cout<<"S";
break;
case MID :
cout<<"M";
break;
case END:
cout<<"E";
break;
}
}
}
};
现在假设我有更多的枚举类型并且它们的名称更长...... 好吧,我得到的不是一个非常好看的代码,我想知道是否可以将特定的 char 绑定(bind)到枚举类型,并可能做这样的事情:
for(int i=0;i<Full.size();i++)
{
cout<(Full[i]).MyChar();
}
或任何其他可以使此代码“更漂亮”的方法。 这可能吗?
最佳答案
不幸的是,您无能为力。如果您有权访问 C++11 强类型枚举器功能,那么您可以执行如下操作:
enum class Section : char {
START = 'S',
MID = 'M',
END = 'E',
};
然后你可以这样做:
std::cout << static_cast<char>(Full[i]) << std::endl;
但是,如果您无法使用此功能,那么您无能为力,我的建议是拥有全局 map std::map<Section, char>
,其中涉及每个 enum
字符部分,或带有原型(prototype)的辅助函数:
inline char SectionToChar( Section section );
它只是实现了 switch()
以更易于访问的方式声明,例如:
inline char SectionToChar( Section section ) {
switch( section )
{
default:
{
throw std::invalid_argument( "Invalid Section value" );
break;
}
case START:
{
return 'S';
break;
}
case MID:
{
return 'M';
break;
}
case END:
{
return 'E';
break;
}
}
}
关于c++ - 将 char 绑定(bind)到枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17095639/