将char绑定到枚举类型
Bind a char to an enum type
我有一段非常类似的代码:
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绑定到enum类型,也许可以这样做:
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;
然而,如果你没有访问这个功能,那么你可以做的不多,我的建议是有一个全局映射std::map<Section, char>
,它将每个enum
部分与一个字符联系起来,或者有一个原型的辅助函数:
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;
}
}
}
在这种情况下,您可以巧妙地转换字符。
enum Section{
START = (int)'S',
MID = (int)'M',
END = (int)'E'
};
...
inline char getChar(Section section)
{
return (char)section;
}
我认为在这种情况下最好的解决方案是使用map:
#include <iostream>
#include <map>
class someclass
{
public:
enum Section{START = 0,MID,END};
map<Section,string> Full;
// set using Full[START] = "S", etc
void ex(){
for(int i=0;i<Full.size();i++)
{
cout << Full[i];
}
}
};
相关文章:
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 如何注册枚举类型到QJSEngine,以便在脚本环境中使用?
- 通过包装器从 C 访问C++ API 时,如何访问枚举类型
- C++/错误:表达式必须具有整数或无作用域枚举类型
- 如何理解c++中在命名空间内部定义的枚举类型enum
- 在类访问混淆中声明的枚举类型
- 在枚举类型上使用std::max是不是一种糟糕的做法
- C++ 在方程中使用变量;错误:表达式必须具有整数或无作用域枚举类型及其他
- 是否可以使用泛型枚举类型作为函数的参数?
- Visual Studio 2017 生成工具与枚举类型的问题
- 使用枚举类型管理存储顺序
- 如何检查类中定义的枚举类型变量是否被分配给?
- 如何从枚举类型中获取枚举值?
- 为什么C++不为枚举类型提供默认"operator>>"函数?
- 确保枚举类型的键/值在软件Revs之间永远不会更改
- MSVC 1 位枚举类型等于 -1,并且相等性测试失败
- 我们可以专业化类模板的枚举(类型)成员吗?
- 错误:以增量方式填充向量时,表达式必须具有整数或无作用域枚举类型
- 枚举类型的重载>>运算符(工作日)
- C 中的枚举类型字符串类别